您的位置:首页 > 其它

cmd for命令

2015-08-23 23:26 190 查看
for命令式批处理命令中最复杂也是功能最为强大的一个命令,它可以对一组不同的文件或数据进行循环处理。

FOR {%variable|%%variable} IN (set) DO command [command-parameters]

%variable 指定一个单一字母可替换的参数。

(set) 指定一个或一组文件。可以使用通配符。

command 指定对每个文件执行的命令。command-parameters

为特定命令指定参数或命令行开关。

在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.

for命令可以带参数也可以不带参数,可以带/d /r /l /f四个参数。

无参数时

[code]   for %%i in (t*.*) do echo %%i --显示当前目录下与t*.*相匹配的文件(只显示文件名,不显示路径) 
   for %%i in (d:\mydocuments\*.doc) do @echo %%i --显示d:\mydocuments\目录下与*.doc相匹配的文件


参数 /d

[code]   这个参数只会搜索目录,不会搜索文件夹。
   for /d %%i in (c:\*) do echo %%i --显示c盘根目录下的所有目录       
   for /d %%i in (???) do echo %%i --显示当前目录下名字只有1-3个字母的目录


参数 /r

[code]   这个参数会搜索指定目录及其子目录。
   for /r c:\ %%i in (boot.ini) do echo %%i --枚举了c盘所有目录
   for /r d:\backup %%i in (1) do echo %%i --枚举d\backup目录
   for /r c:\ %%i in (boot.ini) do if exist %%i echo %%i --很好的搜索命令,列举boot.ini存在的目录


参数 /l

[code]   以增量形式从开始到结束的一个数字序列。step可以为负数。
   for /l %%i in (1,1,5) do @echo %%i --输出1 2 3 4 5
   for /l %%i in (1,2,10) do @echo %%i --输出1,3,5,7,9 
   for /l %%i in (100,-20,1) do @echo %%i --输出100,80,60,40,20
   for /l %%i in (1,1,5) do start cmd --打开5个CMD窗口
   for /l %%i in (1,1,5) do md %%i --建立从1~5共5个文件夹
   for /l %%i in (1,1,5) do rd /q %%i --删除从1~5共5个文件夹


参数 /f

[code]   这个参数可以帮助解析文件。可以设置options进行精细解析。
   FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
   FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
   FOR /F ["options"] %variable IN ('command') DO command [command-parameters]


1) options关键字详解:

  eol=c:指一个行注释字符的结尾(就一个)。例如:eol=; –忽略以分号打头的那些行;

  skip=n:指在文件开始时忽略的行数。例如:skip=2 –忽略2行;

  delims=xxx:指分隔符集。这个替换了空格和跳格键的默认分隔符集。例如:[delims=, ] –指定用逗号,空格对字符串进行分隔。

  tokens=x,y,m-n:指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符是星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。例如:tokens=2,3* –将每行中的第二个和第三个符号传递给 for 程序体;tokens=2,3* … i% –将会把取到的第二个字符串赋给i%,第三个赋给j%,剩下的赋给k%。

  关于usebackq,不同版本的系统提示不同的帮助,不过都有助于理解,所以都摘抄如下:

  (1)usebackq:使用后引号(键盘上数字1左面的那个键)。未使用参数usebackq时:file-set表示文件,不能加引号,所以 不能含有空格;加双引号表示字符串,即”string”;加单引号表示执行命令,即’command’。使用参数usebackq时:file-set 和”file-set”都表示文件,当文件路径或名称中有空格时,就可以用双引号括起来;单引号表示字符串,即’string’;后引号表示命令执行,即
command
。(此段是WinXP系统中的帮助)

  (2)usebackq:指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串;并且一个单引号字符为文字字符串命令;并允许在filenameset中使用双引号扩起文件名称。

  以上两条结合着看,其实已经可以明白了,我再说明一下:

  其实这个参数的目的就是为了处理带有空格的文件名。如果您要处理的文件名和路径中含有空格,如果直接使用,会提示找不到文件。如果你用双引号将文件名 和路径括起来。这时候将作为字符串处理,而不是作为文件了。为了应对这种情况,所以才增加了这个“usebackq”参数。如果使用了这个参数,对于括号 中的加双引号的集合,系统就可以认为是文件了;真正的字符串要加单引号;命令要加反引号。

2) file-set 为一个或多个文件名。继续到 file-set 中的下一个文件之前,每份文件都已被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号。然后用已找到的符 号字符串变量值调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。您可通过指定可选 “options”参数替代默认解析操作。这个带引号的字符串包括一个或多个指定不同解析选项的关键字。

3) %i:专门在 for 语句中得到说明,%j 和 %k 是通过tokens= 选项专门得到说明的。您可以通过 tokens= 一行指定最多 26 个符号,只要不试图说明一个高于字母 ‘z’ 或’Z’ 的变量。请记住,FOR 变量是单一字母、分大小写和全局的;而且,同时不能有 52 个以上都在使用中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: