条件处理符号
&(顺序执行命令),&&(前一个成功则执行后一个), ||(前一个失败执行后一个)
例子:dir&arp ;先执行dir,接着执行arp
dir&&arp ;dir执行成功后,才执行arp
dir||arp ;dir失败(通常返回值为非0时执行失败),才执行arp
环境变量
Cmd.exe 命令行解释器环境由确定命令行解释器和操作系统的行为的变量进行定义。可以使用两种类型的环境变量(系统和本地)来定义命令行解释器环境或整个操作系统环境的行为。系统环境变量定义全局操作系统环境的行为。本地环境变量定义 Cmd.exe 当前实例的环境的行为。
下表列出 Windows XP 的系统和局部环境变量。
变量 类型 说明
%ALLUSERSPROFILE% 局部 返回所有“用户配置文件”的位置。
%APPDATA% 局部 返回默认情况下应用程序存储数据的位置。
%CD% 局部 返回当前目录字符串。
%CMDCMDLINE% 局部 返回用来启动当前的 Cmd.exe 的准确命令行。
%CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。
%COMPUTERNAME% 系统 返回计算机的名称。
%COMSPEC% 系统 返回命令行解释器可执行程序的准确路径。
%DATE% 系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date。
%ERRORLEVEL% 系统 返回最近使用过的命令的错误代码。通常用非零值表示错误。
%HOMEDRIVE% 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。
%HOMEPATH% 系统 返回用户主目录的完整路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。
%HOMESHARE% 系统 返回用户的共享主目录的网络路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。
%LOGONSEVER% 局部 返回验证当前登录会话的域控制器的名称。
%NUMBER_OF_PROCESSORS% 系统 指定安装在计算机上的处理器的数目。
%OS% 系统 返回操作系统的名称。Windows 2000 将操作系统显示为 Windows_NT。
%PATH% 系统 指定可执行文件的搜索路径。
%PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。
%PROCESSOR_ARCHITECTURE% 系统 返回处理器的芯片体系结构。值: x86,IA64。
%PROCESSOR_IDENTFIER% 系统 返回处理器说明。
%PROCESSOR_LEVEL% 系统 返回计算机上安装的处理器的型号。
%PROCESSOR_LEVEL% 系统 返回处理器的版本号。
%PROMPT% 局部 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。
%RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
%SYSTEMDRIVE% 系统 返回包含 Windows XP 根目录(即系统根目录)的驱动器。
%SYSTEMROOT% 系统 返回 Windows XP 根目录的位置。
%TEMP% and %TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其它应用程序则需要 TMP。
%TIME% 系统 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。有关 time 命令的详细信息,请参阅 Time。
%USERDOMAIN% 局部 返回包含用户帐户的域的名称。
%USERNAME% 局部 返回当前登录的用户的名称。
%UserPrefix% 局部 返回当前用户的配置文件的位置。
%WINDIR% 系统 返回操作系统目录的位置。
cmd.exe可以嵌套执行,它的每个实例都继承其父应用程序的环境,对新的cmd.exe实例环境的修改可以不影响父cmd.exe
批处理参数扩展替换
cmd.exe支持批处理参数扩展替换(%0~%9), %0为当前批处理文件名,%1为命令行第一个参数,依此类推,更多的参数替换用shift命令
例:
mycopy.bat C:\Folder1 C:\Folder2
则在mycopy.bat文件内部,执行时所有的%0用mycopy.bat替换,%1用C:\Folder1替换 %2用C:\Folder2替换
比如,在mycopy.bat内部命令:xcopy %1\*.* %2,扩展后为
xcopy C:\Folder1\*.* C:\Folder2
参数替换时,还可使用编辑符实现一些替换时的特殊处理,编辑符的格式如下:
%~[modifier]digit
例子:
编辑符 说明
%~1 扩展 %1 并删除任何引号 ("")。
%~f1 将 %1 扩展到完全合格的路径名。
%~d1 将 %1 扩展到驱动器盘符。
%~p1 将 %1 扩展到路径。
%~n1 将 %1 扩展到文件名。
%~x1 将 %1 扩展到文件扩展名。
%~s1 扩展的路径仅包含短名称。
%~a1 将 %1 扩展到文件属性。
%~t1 将 %1 扩展到文件日期/时间。
%~z1 将 %1 扩展到文件大小。
%~$PATH:1 搜索 PATH 环境变量中列出的目录,并将 %1 扩展到第一个找到的 目录的完全合格名称。如果没有定义环境变量名称,或没有找到文 件,则此编辑符扩展成空字符串。
编辑符和限定符的组合还可用于获取复杂结果,所有可能组合如下:
编辑符 说明
%~dp1 将 %1 扩展到驱动器盘符和路径。
%~nx1 将 %1 扩展到文件名和扩展名。
%~dp$PATH:1 在 PATH 环境变量列出的目录中搜索 %1,并扩展到第一个找到的目录的驱动器盘符和路径。
%~ftza1 将 %1 扩展到类似 dir 的输出行。
命令重定向操作符
可以使用重定向操作符将命令输入和输出数据流从默认位置重定向到不同的位置。输入或输出数据流的位置即为句柄。
下表列出了可用于将命令输入和输出数据流进行重定向的操作符。
重定向操作符 说明
> 将命令输出写入到文件或设备(例如打印机)中,而不是写在命令提示符窗口中。
< 从文件中而不是从键盘中读入命令输入。
>> 将命令输出添加到文件末尾而不删除文件中的信息。
>& 将一个句柄的输出写入到另一个句柄的输入中。
<& 从一个句柄读取输入并将其写入到另一个句柄输出中。
| 从一个命令中读取输出并将其写入另一个命令的输入中。也称作管道。
批处理核心命令:
set [[/a [expression]] [/p variable=[promptString]] string]
set命令具有的功能:创建,配置和查询环境变量,表达式值计算
<>|&^是命令外壳特殊字符,字符串中出现这些字符时需要加escape字符(^)转义,如
P&G, 应为P^&G; YY||MM,应为YY^|^|MM.
参数释义:
/a expression开关,将等号右边的string作为可求值的数值表达式计算,按递减优先级支持以下操作:
运算符 执行的操作
< > 分组
* / % + - 算法
<< >> 逻辑移位
& 按位“与”运算
^ 按位“异或”运算
| 按位“或”运算
= *= /= %= += -= &= ^= |= <<= >>= 分配
, 表达式分隔符
string作为表达式求值时,出现的非数值字符默认为环境变量名,并将其值转换为数字后再进行处理,不存在的环境变量自动作为0处理。取值时无需再加%。
表达式中的数字支持16进制和8进制形式,16进制数以0x开头,8进制以0开头,因此08..和09..是非法数,因为8进制数没有8和9两个digit。
/p开关,允许将用户输入设置为变量variable的值,读取输入前系统会显示指定的promptString, promptString可以为空
例子:set /p myExpression=Please input a expression:
set /a myResult=%myExpression%
则myResult中保存的即为输入表达式的值
set命令的简单用法为
set [variable[=[string]]],可完成的功能为查询、新建、更改或者删除环境变量
For命令
格式如下:
for {%variable|%%variable} in (set) do command [ CommandLineOption ]
注释:
下列属性适用于 for 命令:
for 命令使用指定 set 中的每个文本字符串替换 %variable 或 %%variable,直到 command 处理所有文件为止。
记住,for variable名是区分大小写、全局的,并且每次总共不超过 52 个是活动的。
要避免批处理参数从 %0 到 %9 混淆,对 variable 可以使用除数字 0 到 9 之外的任何字符。对于简单的批处理文件,单个字符即可奏效,例如 %%f。
在复杂的批处理文件中可以使用 variable 的多个值来区分不同的可替换变量。
set 参数可以代表单个或多个文件组。可以使用通配符(即,* 和 ?)指定文件组。以下为有效文件组:
(*.doc)
(*.doc *.txt *.me)
(jan*.doc jan*.rpt feb*.doc feb*.rpt)
(ar??1991.* ap??1991.*)
在使用 for 命令时,set 中的第一个值代替 %variable 或 %%variable,然后由指定的命令处理该值。这一直会继续下去,直到处理完与 set 值相对应的所有文件(或文件组)为止。
In 和 do 不是参数,但必须将它们与 for 一起使用。如果省略其中任何一个关键字,就会出现错误消息。
如果命令扩展名处于启用状态(即,默认设置),则支持 for 的下列其它形式:
仅为目录
如果 set 包含通配符(* 和 ?),则为匹配 set 的每个目录(而不是指定目录中的文件组)而执行指定的 command。语法是:
for /D {%% | %}variable in (set) do command [CommandLineOptions]
递归
进入根目录树 [Drive:]Path,在树的每个目录中执行 for 语句。如果在 /R 后没有指定目录,则假定为当前目录。如果 set 只是一个句号 (.),则只列举目录树。语法是:
for /R [[Drive :]Path] {%% | %}variable in (set) do command [CommandLineOptions]
重复数值范围
使用迭代变量设置起始值 (start#) ,然后一步步执行一系列设置范围的值,直到该值超过设置的终止值 (end#)。/L 将通过对 start# 与 end# 进行比较,执行迭代变量。如果 start# 小于 end#,就会执行该命令。如果迭代变量超过 end#,则命令解释程序退出此循环。也可以使用负 step# 以递减数值的方式一步步执行此范围内的值。例如,(1,1,5) 生成顺序 1 2 3 4 5,而 (5,-1,1) 则生成顺序 (5 4 3 2 1)。语法是:
for /L {%% | %}variable in (start#,step#,end#) do command [CommandLineOptions]
重复和文件解析
使用文件解析过程处理命令输出、字符串和文件内容。使用迭代变量定义要检查的内容或字符串,以及使用各种 ParsingKeywords 选项进一步修改解析方式。使用 ParsingKeywords 令牌选项指定哪些令牌应该传递为迭代程序变量。注意:在没有使用令牌选项时,/F 将仅检查第一个令牌。
文件解析过程包括读取输出、字符串或文件内容、分成独立的文本行及然后将每行解析成零个或更多个令牌。然后通过设置为令牌的迭代程序变量值,调用 for 循环。默认情况下,/F 传递每个文件每一行的第一个空白分隔符号。跳过空行。语法的不同点为:
for /F ["ParsingKeywords"] {%% | %}variable in (filenameset) do command [CommandLineOptions]
for /F ["ParsingKeywords"] {%% | %}variable in ("LiteralString") do command [CommandLineOptions]
for /F ["ParsingKeywords"] {%% | %}variable in ('command') do command [CommandLineOptions]
filenameset 参数指定一个或多个文件名称。在继续到 filenameset 中的下一个文件之前,每个文件都会被打开、读取和处理。要覆盖默认解析行为,指定 "ParsingKeywords"。这是一个引用字符串,它包含一个或多个关键字以指定不同的解析选项。
如果使用 usebackq(use back quoted, 后引号`) 选项,请使用如下语法之一:
for /F ["usebackqParsingKeywords"] {%% | %}variable in ("filenameset") do command [CommandLineOptions]
for /F ["usebackqParsingKeywords"] {%% | %}variable in ('LiteralString') do command [CommandLineOptions]
for /F ["usebackqParsingKeywords"] {%% | %}variable in (`command`) do command [CommandLineOptions]
下表列出可以用于 ParsingKeywords 的解析关键字。
关键字 说明
eol=c 指定行尾字符(只一个字符)。
skip=n 指定在文件的开头跳过的行数。
delims=xxx 指定定界符集合。这将替换空格和制表符的默认分隔符集。
tokens=x,y,m-n 指定将哪些令牌从每行传递到每个迭代的 for 正文。结果就分配了附加变量名称。m-n 格式是一个范围
,指定从 mth 到 nth 的令牌。如果 tokens=字符串中最后一个字符是星号 (*),则将分配附加的变量,并在解析的最后一个令牌后在行上接收剩余的文本。
usebackq 指定可以使用引号引用 filenameset 中的文件名称,将后面带有引号的字符串作为一个命令执行,而带有 单引号的字符串是文字字符串命令。
解析字符串
通过将 Filenameset 包括在圆括号内,并且外面再带上单引号(即,'filenameset'),可以使用 for /F 对直接字符串解析逻辑。将 Filenameset 视为从某个文件输入的单行,然后接受解析。
解析输出
通过将圆括号之间的 filenameset 变为后面带有引号的字符串,可以利用 for /F 命令解析命令输出。将它作为命令行,此命令被传递给子 Cmd.exe,并将输出捕获到内存并进行解析,就象它是一个文件一样。
例子:
for /F "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k
这个命令解析 myfile.txt 文件的每一行,忽略以分号开头的行(注意eol只对一行起始字符有效,行中其他位置出现该字符并不会忽略后面的字符),将第二和第三个令牌从各行传递到 FOR 正文(令牌通过逗号或空格分隔)中。FOR 语句的正文引用 %i 以获得第二个令牌,引用 %j 以获得第三个令牌,引用 %k 以获得其余全部令牌。如果您提供的文件名包含空格,请使用引号将文本引起来(例如,"File Name")。要使用引号,必须使用 usebackq。否则,就将引号解释为定义要解析的文字字符串。
%i 在 FOR 语句中明确声明,并且 %j 和 %k 使用 tokens= 隐含声明。只要它不会引起尝试声明高于字母“z”或“Z”的某个变量,则使用 tokens= 可以指定最多 26 个令牌。
要通过将 filenameset 放在括号之间来解析命令输出,请键入:
for /F "usebackq delims==" %i IN (`set`) DO @echo %i
这个范例列举当前环境中的环境变量名。
例子:文件namelist.txt的内容为:
01.xxxx
...
13.xxxx
同目录下有Track01.mp3~Track13.mp3等文件,则执行下面命令:
@echo off
if exist namelist.txt for /F "delims=. tokens=1,2" %%i in (namelist.txt) do if exist \ Track%%i.mp3 rename Track%%i.mp3 "%%i.%%j.mp3"
pause
结果为按namelist.txt的名字批量重命名Track*.mp3为相应的名字
&(顺序执行命令),&&(前一个成功则执行后一个), ||(前一个失败执行后一个)
例子:dir&arp ;先执行dir,接着执行arp
dir&&arp ;dir执行成功后,才执行arp
dir||arp ;dir失败(通常返回值为非0时执行失败),才执行arp
环境变量
Cmd.exe 命令行解释器环境由确定命令行解释器和操作系统的行为的变量进行定义。可以使用两种类型的环境变量(系统和本地)来定义命令行解释器环境或整个操作系统环境的行为。系统环境变量定义全局操作系统环境的行为。本地环境变量定义 Cmd.exe 当前实例的环境的行为。
下表列出 Windows XP 的系统和局部环境变量。
变量 类型 说明
%ALLUSERSPROFILE% 局部 返回所有“用户配置文件”的位置。
%APPDATA% 局部 返回默认情况下应用程序存储数据的位置。
%CD% 局部 返回当前目录字符串。
%CMDCMDLINE% 局部 返回用来启动当前的 Cmd.exe 的准确命令行。
%CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。
%COMPUTERNAME% 系统 返回计算机的名称。
%COMSPEC% 系统 返回命令行解释器可执行程序的准确路径。
%DATE% 系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date。
%ERRORLEVEL% 系统 返回最近使用过的命令的错误代码。通常用非零值表示错误。
%HOMEDRIVE% 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。
%HOMEPATH% 系统 返回用户主目录的完整路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。
%HOMESHARE% 系统 返回用户的共享主目录的网络路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。
%LOGONSEVER% 局部 返回验证当前登录会话的域控制器的名称。
%NUMBER_OF_PROCESSORS% 系统 指定安装在计算机上的处理器的数目。
%OS% 系统 返回操作系统的名称。Windows 2000 将操作系统显示为 Windows_NT。
%PATH% 系统 指定可执行文件的搜索路径。
%PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。
%PROCESSOR_ARCHITECTURE% 系统 返回处理器的芯片体系结构。值: x86,IA64。
%PROCESSOR_IDENTFIER% 系统 返回处理器说明。
%PROCESSOR_LEVEL% 系统 返回计算机上安装的处理器的型号。
%PROCESSOR_LEVEL% 系统 返回处理器的版本号。
%PROMPT% 局部 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。
%RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
%SYSTEMDRIVE% 系统 返回包含 Windows XP 根目录(即系统根目录)的驱动器。
%SYSTEMROOT% 系统 返回 Windows XP 根目录的位置。
%TEMP% and %TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其它应用程序则需要 TMP。
%TIME% 系统 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。有关 time 命令的详细信息,请参阅 Time。
%USERDOMAIN% 局部 返回包含用户帐户的域的名称。
%USERNAME% 局部 返回当前登录的用户的名称。
%UserPrefix% 局部 返回当前用户的配置文件的位置。
%WINDIR% 系统 返回操作系统目录的位置。
cmd.exe可以嵌套执行,它的每个实例都继承其父应用程序的环境,对新的cmd.exe实例环境的修改可以不影响父cmd.exe
批处理参数扩展替换
cmd.exe支持批处理参数扩展替换(%0~%9), %0为当前批处理文件名,%1为命令行第一个参数,依此类推,更多的参数替换用shift命令
例:
mycopy.bat C:\Folder1 C:\Folder2
则在mycopy.bat文件内部,执行时所有的%0用mycopy.bat替换,%1用C:\Folder1替换 %2用C:\Folder2替换
比如,在mycopy.bat内部命令:xcopy %1\*.* %2,扩展后为
xcopy C:\Folder1\*.* C:\Folder2
参数替换时,还可使用编辑符实现一些替换时的特殊处理,编辑符的格式如下:
%~[modifier]digit
例子:
编辑符 说明
%~1 扩展 %1 并删除任何引号 ("")。
%~f1 将 %1 扩展到完全合格的路径名。
%~d1 将 %1 扩展到驱动器盘符。
%~p1 将 %1 扩展到路径。
%~n1 将 %1 扩展到文件名。
%~x1 将 %1 扩展到文件扩展名。
%~s1 扩展的路径仅包含短名称。
%~a1 将 %1 扩展到文件属性。
%~t1 将 %1 扩展到文件日期/时间。
%~z1 将 %1 扩展到文件大小。
%~$PATH:1 搜索 PATH 环境变量中列出的目录,并将 %1 扩展到第一个找到的 目录的完全合格名称。如果没有定义环境变量名称,或没有找到文 件,则此编辑符扩展成空字符串。
编辑符和限定符的组合还可用于获取复杂结果,所有可能组合如下:
编辑符 说明
%~dp1 将 %1 扩展到驱动器盘符和路径。
%~nx1 将 %1 扩展到文件名和扩展名。
%~dp$PATH:1 在 PATH 环境变量列出的目录中搜索 %1,并扩展到第一个找到的目录的驱动器盘符和路径。
%~ftza1 将 %1 扩展到类似 dir 的输出行。
命令重定向操作符
可以使用重定向操作符将命令输入和输出数据流从默认位置重定向到不同的位置。输入或输出数据流的位置即为句柄。
下表列出了可用于将命令输入和输出数据流进行重定向的操作符。
重定向操作符 说明
> 将命令输出写入到文件或设备(例如打印机)中,而不是写在命令提示符窗口中。
< 从文件中而不是从键盘中读入命令输入。
>> 将命令输出添加到文件末尾而不删除文件中的信息。
>& 将一个句柄的输出写入到另一个句柄的输入中。
<& 从一个句柄读取输入并将其写入到另一个句柄输出中。
| 从一个命令中读取输出并将其写入另一个命令的输入中。也称作管道。
批处理核心命令:
set [[/a [expression]] [/p variable=[promptString]] string]
set命令具有的功能:创建,配置和查询环境变量,表达式值计算
<>|&^是命令外壳特殊字符,字符串中出现这些字符时需要加escape字符(^)转义,如
P&G, 应为P^&G; YY||MM,应为YY^|^|MM.
参数释义:
/a expression开关,将等号右边的string作为可求值的数值表达式计算,按递减优先级支持以下操作:
运算符 执行的操作
< > 分组
* / % + - 算法
<< >> 逻辑移位
& 按位“与”运算
^ 按位“异或”运算
| 按位“或”运算
= *= /= %= += -= &= ^= |= <<= >>= 分配
, 表达式分隔符
string作为表达式求值时,出现的非数值字符默认为环境变量名,并将其值转换为数字后再进行处理,不存在的环境变量自动作为0处理。取值时无需再加%。
表达式中的数字支持16进制和8进制形式,16进制数以0x开头,8进制以0开头,因此08..和09..是非法数,因为8进制数没有8和9两个digit。
/p开关,允许将用户输入设置为变量variable的值,读取输入前系统会显示指定的promptString, promptString可以为空
例子:set /p myExpression=Please input a expression:
set /a myResult=%myExpression%
则myResult中保存的即为输入表达式的值
set命令的简单用法为
set [variable[=[string]]],可完成的功能为查询、新建、更改或者删除环境变量
For命令
格式如下:
for {%variable|%%variable} in (set) do command [ CommandLineOption ]
注释:
下列属性适用于 for 命令:
for 命令使用指定 set 中的每个文本字符串替换 %variable 或 %%variable,直到 command 处理所有文件为止。
记住,for variable名是区分大小写、全局的,并且每次总共不超过 52 个是活动的。
要避免批处理参数从 %0 到 %9 混淆,对 variable 可以使用除数字 0 到 9 之外的任何字符。对于简单的批处理文件,单个字符即可奏效,例如 %%f。
在复杂的批处理文件中可以使用 variable 的多个值来区分不同的可替换变量。
set 参数可以代表单个或多个文件组。可以使用通配符(即,* 和 ?)指定文件组。以下为有效文件组:
(*.doc)
(*.doc *.txt *.me)
(jan*.doc jan*.rpt feb*.doc feb*.rpt)
(ar??1991.* ap??1991.*)
在使用 for 命令时,set 中的第一个值代替 %variable 或 %%variable,然后由指定的命令处理该值。这一直会继续下去,直到处理完与 set 值相对应的所有文件(或文件组)为止。
In 和 do 不是参数,但必须将它们与 for 一起使用。如果省略其中任何一个关键字,就会出现错误消息。
如果命令扩展名处于启用状态(即,默认设置),则支持 for 的下列其它形式:
仅为目录
如果 set 包含通配符(* 和 ?),则为匹配 set 的每个目录(而不是指定目录中的文件组)而执行指定的 command。语法是:
for /D {%% | %}variable in (set) do command [CommandLineOptions]
递归
进入根目录树 [Drive:]Path,在树的每个目录中执行 for 语句。如果在 /R 后没有指定目录,则假定为当前目录。如果 set 只是一个句号 (.),则只列举目录树。语法是:
for /R [[Drive :]Path] {%% | %}variable in (set) do command [CommandLineOptions]
重复数值范围
使用迭代变量设置起始值 (start#) ,然后一步步执行一系列设置范围的值,直到该值超过设置的终止值 (end#)。/L 将通过对 start# 与 end# 进行比较,执行迭代变量。如果 start# 小于 end#,就会执行该命令。如果迭代变量超过 end#,则命令解释程序退出此循环。也可以使用负 step# 以递减数值的方式一步步执行此范围内的值。例如,(1,1,5) 生成顺序 1 2 3 4 5,而 (5,-1,1) 则生成顺序 (5 4 3 2 1)。语法是:
for /L {%% | %}variable in (start#,step#,end#) do command [CommandLineOptions]
重复和文件解析
使用文件解析过程处理命令输出、字符串和文件内容。使用迭代变量定义要检查的内容或字符串,以及使用各种 ParsingKeywords 选项进一步修改解析方式。使用 ParsingKeywords 令牌选项指定哪些令牌应该传递为迭代程序变量。注意:在没有使用令牌选项时,/F 将仅检查第一个令牌。
文件解析过程包括读取输出、字符串或文件内容、分成独立的文本行及然后将每行解析成零个或更多个令牌。然后通过设置为令牌的迭代程序变量值,调用 for 循环。默认情况下,/F 传递每个文件每一行的第一个空白分隔符号。跳过空行。语法的不同点为:
for /F ["ParsingKeywords"] {%% | %}variable in (filenameset) do command [CommandLineOptions]
for /F ["ParsingKeywords"] {%% | %}variable in ("LiteralString") do command [CommandLineOptions]
for /F ["ParsingKeywords"] {%% | %}variable in ('command') do command [CommandLineOptions]
filenameset 参数指定一个或多个文件名称。在继续到 filenameset 中的下一个文件之前,每个文件都会被打开、读取和处理。要覆盖默认解析行为,指定 "ParsingKeywords"。这是一个引用字符串,它包含一个或多个关键字以指定不同的解析选项。
如果使用 usebackq(use back quoted, 后引号`) 选项,请使用如下语法之一:
for /F ["usebackqParsingKeywords"] {%% | %}variable in ("filenameset") do command [CommandLineOptions]
for /F ["usebackqParsingKeywords"] {%% | %}variable in ('LiteralString') do command [CommandLineOptions]
for /F ["usebackqParsingKeywords"] {%% | %}variable in (`command`) do command [CommandLineOptions]
下表列出可以用于 ParsingKeywords 的解析关键字。
关键字 说明
eol=c 指定行尾字符(只一个字符)。
skip=n 指定在文件的开头跳过的行数。
delims=xxx 指定定界符集合。这将替换空格和制表符的默认分隔符集。
tokens=x,y,m-n 指定将哪些令牌从每行传递到每个迭代的 for 正文。结果就分配了附加变量名称。m-n 格式是一个范围
,指定从 mth 到 nth 的令牌。如果 tokens=字符串中最后一个字符是星号 (*),则将分配附加的变量,并在解析的最后一个令牌后在行上接收剩余的文本。
usebackq 指定可以使用引号引用 filenameset 中的文件名称,将后面带有引号的字符串作为一个命令执行,而带有 单引号的字符串是文字字符串命令。
解析字符串
通过将 Filenameset 包括在圆括号内,并且外面再带上单引号(即,'filenameset'),可以使用 for /F 对直接字符串解析逻辑。将 Filenameset 视为从某个文件输入的单行,然后接受解析。
解析输出
通过将圆括号之间的 filenameset 变为后面带有引号的字符串,可以利用 for /F 命令解析命令输出。将它作为命令行,此命令被传递给子 Cmd.exe,并将输出捕获到内存并进行解析,就象它是一个文件一样。
例子:
for /F "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k
这个命令解析 myfile.txt 文件的每一行,忽略以分号开头的行(注意eol只对一行起始字符有效,行中其他位置出现该字符并不会忽略后面的字符),将第二和第三个令牌从各行传递到 FOR 正文(令牌通过逗号或空格分隔)中。FOR 语句的正文引用 %i 以获得第二个令牌,引用 %j 以获得第三个令牌,引用 %k 以获得其余全部令牌。如果您提供的文件名包含空格,请使用引号将文本引起来(例如,"File Name")。要使用引号,必须使用 usebackq。否则,就将引号解释为定义要解析的文字字符串。
%i 在 FOR 语句中明确声明,并且 %j 和 %k 使用 tokens= 隐含声明。只要它不会引起尝试声明高于字母“z”或“Z”的某个变量,则使用 tokens= 可以指定最多 26 个令牌。
要通过将 filenameset 放在括号之间来解析命令输出,请键入:
for /F "usebackq delims==" %i IN (`set`) DO @echo %i
这个范例列举当前环境中的环境变量名。
例子:文件namelist.txt的内容为:
01.xxxx
...
13.xxxx
同目录下有Track01.mp3~Track13.mp3等文件,则执行下面命令:
@echo off
if exist namelist.txt for /F "delims=. tokens=1,2" %%i in (namelist.txt) do if exist \ Track%%i.mp3 rename Track%%i.mp3 "%%i.%%j.mp3"
pause
结果为按namelist.txt的名字批量重命名Track*.mp3为相应的名字
相关推荐
以上是对《[原创]Informatica PowerExchange V9.5.0 for i5OS 安装和使用手册》中提到的关键知识点的总结和解释。通过理解和掌握这些知识点,可以有效地完成PWX的安装、配置和使用,从而实现高效的数据集成任务。
总结,STM32开发环境的构建主要涉及物理层面的USB转串口和J-LINK驱动的安装,程序加载工具的选用,以及软件层面的Keil编译环境和调试环境的配置。理解并熟练掌握这些步骤,对于STM32的开发工作至关重要,也是后续...
#### 第七部分:总结 - 整个过程涉及到多个方面的技术知识,包括Oracle数据库管理、脚本编程、安装程序开发等。 - 成功实现Oracle的静默安装不仅能够提高安装效率,还能提升用户体验。 - 未来还可以进一步优化安装...
总结来说,这个项目提供了一个使用Flex开发的网上商店示例,包括源代码、构建脚本和样式文件,对于学习Flex编程、了解Flex与CSS结合创建用户界面,以及研究如何将Flex应用部署到Web环境的人都非常有帮助。...
《大数据技术原理与应用》是林子雨...总结,大数据技术原理与应用包括了信息技术历史、数据产生方式、大数据特征、思维方式转变、关键技术、产业应用、Hadoop等重要概念,这些知识点构成了理解和应用大数据技术的基础。
#### 十、总结 通过以上详细的步骤和说明,您应该能够顺利地在 AS400 平台上完成 Informatica PowerExchange V8.5.1 的安装与配置,并掌握其基本使用方法。无论是数据的批处理还是实时同步,PowerExchange 都能提供...
标题中的“[原创]unix2dos工具”表明这是一个原创的实现,可能具有特定的设计或优化,旨在解决跨平台文本文件格式兼容性问题。 【Unix与DOS文本格式差异】 在计算机世界中,不同的操作系统有着不同的文本文件换行...
总结来说,WinSCP作为一款强大的Linux连接工具,不仅提供安全的文件传输,还具备丰富的功能和良好的用户体验,尤其对于那些需要频繁在Windows和Linux之间切换的用户来说,它是提高工作效率的利器。通过其提供的多种...
卡巴斯基2012循环试用批处理文件,感谢yt8619704原创,12月4日更新,安全有效不反弹。 以下BAT或VBS使用时无需关闭卡巴自我保护,支持卡巴2009-2012(PURE/kis/kav)。可以无限循环试用30天。在“32位 XP_SP3、32位...
卡巴斯基2012循环试用批处理文件,感谢yt8619704原创,12月4日更新,安全有效不反弹。 以下BAT或VBS使用时无需关闭卡巴自我保护,支持卡巴2009-2012(PURE/kis/kav)。可以无限循环试用30天。在“32位 XP_SP3、32位...
卡巴斯基2012循环试用批处理文件,感谢yt8619704原创,12月4日更新,安全有效不反弹。 以下BAT或VBS使用时无需关闭卡巴自我保护,支持卡巴2009-2012(PURE/kis/kav)。可以无限循环试用30天。在“32位 XP_SP3、32位...
* GPU、TPU和批处理:为了提高深度学习模型的计算效率,可以使用GPU、TPU和批处理等技术,GPU可以提供高性能的计算能力,TPU是专门为机器学习设计的芯片,批处理可以将多个数据同时处理。 * 张量:张量是一种数学...
总结,本文详细介绍了在PyCharm中搭建Scrapy环境和创建Scrapy项目的过程,以及编写了一个简单的爬虫示例。通过这种方式,你可以快速地构建自己的网络爬虫,高效地抓取和处理网页数据。在实际应用中,你可以根据需求...
本资料主要针对Java MySQL JDBC的上机练习,由原创作者田超凡提供,旨在帮助学习者深入理解和掌握JDBC的使用。 在"JavaMySQL-JDBC-第3章上机练习.zip"中,我们可以期待一系列的实战练习,这些练习可能涵盖以下几个...
MJDU v4.0 是一个原创的Java组件,专为DAO层设计,旨在简化CRUD(创建、读取、更新、删除)操作以及登录和修改密码等常见功能。尽管该组件于2012年末发布,但由于缺乏有效的市场推广,其潜力并未得到充分发掘。本文...
版权是一种法律保护,它赋予创作者对其原创作品的独占权利,包括复制、分发、展示和修改作品的权利。在软件开发中,版权信息通常出现在源代码文件的开头,用以声明所有权和授权条款。这有助于防止未经授权的使用、...
- **批处理计算**:如Spark、MapReduce等,适合于离线数据处理。 - **流计算**:如Flink、Storm等,适用于实时数据处理。 - **图计算**:如Pregel、GraphX等,适用于处理复杂网络结构的数据。 - **查询分析计算*...
"NGUI学习笔记 阿七原创.doc"可能包含了作者在学习过程中整理的NGUI常用方法和技巧,例如: - 如何创建和配置UI元素 - 使用Tween动画系统制作平滑过渡效果 - 利用UI逻辑控制器实现复杂交互逻辑 - UI性能优化实践 - ...
如果遇到问题,建议参照描述中提到的博客文章《JSHOP2的环境配置——详细教程(原创)》,该教程将详细指导用户完成整个配置过程。 **ANTLR.jar与Makefile** `antlr.jar`是ANTLR(ANother Tool for Language ...
本文所涉及的内容集中于几种常见的批处理作业调度算法,并对它们进行了总结、分析及改进的探讨。下面,我们将详细阐述这些算法的原理、优缺点以及可能的改进策略。 先来先服务调度算法(FCFS)是最简单的作业调度...