windows命令⾏for⽤法
for /r ⽬录名 %i in (匹配模式1,匹配模式2) do @echo %i
for /r SATA %i in (*.txt) do @echo %i
D:\REY\test>for /r "D:\REY\SATA" %i in (*.doc) do move /y "%i" .
for /r . %i in (*.doc) do move /y "%i" 01-WORD
for /r "D:\REY\SATA" %i in (*.doc,*.docx) do move /y "%i" "D:\REY\test\01-WORD"
for /r "D:\REY\SATA" %i in (*.xls,*.xlt,*.xlsx) do move /y "%i" "D:\REY\test\01-EXCEL"
========================================= copy 测试 ================================================
for /r "D:\REY\SATA" %i in (*.doc,*.docx) do copy /y "%i" "D:\REY\test\01-WORD"
for /r "D:\REY\SATA" %i in (*.xls,*.xlsx) do copy /y "%i" "D:\REY\test\02-EXCEL"
for /r "D:\REY\SATA" %i in (*.ppt,*.pptx) do copy /y "%i" "D:\REY\test\03-PPT"
for /r "D:\REY\SATA" %i in (*.pdf) do copy /y "%i" "D:\REY\test\04-PDF"
for /r "D:\REY\SATA" %i in (*.rar,*.zip) do copy /y "%i" "D:\REY\test\05-RAR_ZIP"
========================================= move 操作 ================================================
for /r "D:\REY\SATA" %i in (*.doc,*.docx) do move /y "%i" "D:\REY\test\01-WORD"
for /r "D:\REY\SATA" %i in (*.xls,*.xlsx) do move /y "%i" "D:\REY\test\02-EXCEL"
for /r "D:\REY\SATA" %i in (*.ppt,*.pptx) do move /y "%i" "D:\REY\test\03-PPT"
for /r "D:\REY\SATA" %i in (*.pdf) do move /y "%i" "D:\REY\test\04-PDF"
for /r "D:\REY\SATA" %i in (*.rar,*.zip) do move /y "%i" "D:\REY\test\05-RAR_ZIP"
for /r "D:\REY\SATA" %i in (*.jpg,*.jpeg,*.png) do move /y "%i" "D:\REY\test\06-IMAGE"
for /r "D:\REY\SATA" %i in (*.txt,*.chm,*.rtf) do move /y "%i" "D:\REY\test\07-OtherFile"
=========================================拓展 ================================================
格式:FOR [参数] %%变量名 IN (相关⽂件或命令) DO 执⾏的命令
作⽤:对⼀个或⼀组⽂件,字符串或命令结果中的每⼀个对象执⾏特定命令,达到我们想要的结果。
注意:在批处理⽂件中使⽤ FOR 命令时,指定变量请使⽤ %%variable,⽽不要⽤ %variable。变量名称是区分⼤⼩写的,所以 %i 不同于 %I.
关于:for命令可以带参数或不带参数,带参数时⽀持以下参数:/d /l /r /f
下⾯分别解释⼀下
零:⽆参数时:
FOR %variable IN (set) DO command [command-parameters]
%variable 指定⼀个单⼀字母可替换的参数。
(set) 指定⼀个或⼀组⽂件。可以使⽤通配符。
command 指定对每个⽂件执⾏的命令。
command-parameters
为特定命令指定参数或命令⾏开关。
TTT⽰例:
for %%i in (t*.*) do echo %%i --显⽰当前⽬录下与t*.*相匹配的⽂件(只显⽰⽂件名,不显⽰路径)
for %%i in (d:\mydocuments\*.doc) do @echo %%i --显⽰d:\mydocuments\⽬录下与*.doc相匹配的⽂件
⼀、参数 /d (参数只能显⽰当前⽬录下的⽬录名字)
格式:FOR /D %variable IN (set) DO command [command-parameters]
这个参数主要⽤于⽬录搜索,不会搜索⽂件,/D 参数只能显⽰当前⽬录下的⽬录名字。(TTT特别说明:只会搜索指定⽬录下的⽬录,不会搜索再下⼀级的⽬录。)
TTT⽰例:
for /d %%i in (c:\*) do echo %%i --显⽰c盘根⽬录下的所有⽬录
for /d %%i in (???) do echo %%i --显⽰当前⽬录下名字只有1-3个字母的⽬录
⼆、参数 /R (搜索指定路径及所有⼦⽬录中与set相符合的所有⽂件)
格式:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
此命令会搜索指定路径及所有⼦⽬录中与set相符合的所有⽂件,注意是指定路径及所有⼦⽬录。
1、set中的⽂件名如果含有通配符(?或*),则列举/R参数指定的⽬录及其下⾯的所⽤⼦⽬录中与set相符合的所有⽂件,⽆相符⽂件的⽬录则不列举。
2、如果set中为具体⽂件名,不含通配符,则枚举该⽬录树(即列举该⽬录及其下⾯的所有⼦⽬录)(并在后⾯加上具体的⽂件名),⽽不管set中的指定⽂件是否存在。 例:for /r c:\ %%i in (*.exe) do echo %%i --把C盘根⽬录,和每个⽬录的⼦⽬录下⾯全部的EXE⽂件都列出来了!!!!
TTT⽰例:
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 (该集表⽰以增量形式从开始到结束的⼀个数字序列。可以使⽤负的 Step)
格式:FOR /L %variable IN (start,step,end) DO command [command-parameters]
该集表⽰以增量形式从开始到结束的⼀个数字序列。可以使⽤负的 Step
TTT⽰例:
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 (使⽤⽂件解析来处理命令输出、字符串及⽂件内容。)
这个参数是最难的,参数⼜多,先简单的解释⼀下:for命令带这个参数可以分析⽂件内容,字符串内容或某⼀命令输出的结果,并通过设置option得我们想要的结果。 以下是某⾼⼿的解释,感觉有点太专业了,⾃认为不太容易理解,也列⼀下:
[迭代及⽂件解析--使⽤⽂件解析来处理命令输出、字符串及⽂件内容。使⽤迭代变量定义要检查的内容或字符串,并使⽤各种options选项进⼀步修改解析⽅式。使⽤options 令牌选项指定哪些令牌应该作为迭代变量传递。
请注意:在没有使⽤令牌选项时,/F 将只检查第⼀个令牌。⽂件解析过程包括读取输出、字符串或⽂件内容,将其分成独⽴的⽂本⾏以及再将每⾏解析成零个或更多个令牌。然后通过设置为令牌的迭代变量值,调⽤ for 循环。
默认情况下,/F 传递每个⽂件每⼀⾏的第⼀个空⽩分隔符号。跳过空⾏。]
格式:
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]
或者,如果有 usebackq 选项:
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]
TTT说明:以上是WinXP系统中的帮助内容,你可以注意到,两者完全相同,这其实是系统的错误,第⼆段“如果有 usebackq 选项:”应该以下的内容:
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] --(`command`中的引号为反引号,是键盘上数字1左⾯的那个键)
(TTT说明:下⾯是详细的解释,⼤部分是系统中的帮助内容,也有些错误(怪不得for命令这么难学),已经被我纠正了。)
1) OPTION关键字详解:
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 个以上都在使⽤中。
(TTT补充说明:
⼀般在tokens后只指定第⼀个参数,如%%i或%%a,在后⾯使⽤第⼆个及两个以上的参数,⾃动按顺序往下排即可。如前⾯指定的是%%a,后⾯则⽤%%b代表第⼆个结果,%%c代表第三个结果。。。测试了⼀下tokens后指定多个变量名,没有测试成功,应该是不可以的。所以token后只能跟要使⽤的第⼀个变量名
如果使⽤的变量名超过了%z或%Z,就⽆法使⽤了,曾经以为会循环过来:如%%z后可以使⽤%%a或%%A,但经测试,这是不可以的。
如:for /f "tokens=1,2,3* delims=-, " %%y in ("aa bb,cc-dd ee") do echo %%y %%z %%A %%a --只会输出前两个字符串,后⾯的两个变量是⽆效的。)
以下是系统提供的范例:
FOR /F "eol=; tokens=2,3* delims=, " %i in () do @echo %i %j %k --
说明:会分析 中的每⼀⾏,
eol=; --忽略以分号打头的那些⾏;
tokens=2,3* --将每⾏中的第⼆个和第三个符号传递给 for 程序体;
delims= , --⽤逗号和/或空格定界符号。
%i --这个 for 程序体的语句引⽤ %i 来取得取得的⾸个字符串(本例中为第⼆个符号),引⽤ %j 来取得第⼆个字符串(本例中为第三个符号)引⽤ %k来取得第三个符号后的所有剩余符号。
(TTT说明:上述例⼦和说明中明显的错误,%i应该换为%%i(帮助中有明确的说明:指定变量请使⽤ %%variable,⽽不要⽤ %variable,误导)
TTT:下⾯列我做的⼏个例⼦:
1,分析⽂件的例⼦
FOR /F "eol=; tokens=1,2* delims=,- " %%i in (d:\) do echo %%i %%j %%k
2,分析字符串的例⼦:
for /f "tokens=1,2,3* delims=-, " %%i in ("aa bb,cc-dd ee") do echo %%i %%j %%k %%l
3,分析命令输出的例⼦:
FOR /F "tokens=1* delims==" %%i IN ('set') DO @echo [%%i----%%j]
如果使⽤了usebackq参数后,命令如下,结果与上⾯的完全相同。
1,分析⽂件的例⼦
FOR /F "usebackq eol=; tokens=1,2* delims=,- " %%i in ("d:\") do echo %%i %%j %%k
2,分析字符串的例⼦:
for /f "usebackq tokens=1,2,3* delims=-, " %%i in ('aa bb,cc-dd ee') do echo %%i %%j %%k %%l
3,分析命令输出的例⼦:(会枚举当前环境中的环境变量名称和值。)
FOR /F "usebackq tokens=1* delims==" %%i IN (`set`) DO @echo [%%i----%%j]
结果⼤家可以试⼀下,很容易就明⽩的。
FOR命令中的变量
FOR 变量参照的替换已被增强。您现在可以使⽤下列选项语法:
~I - 删除任何引号("),扩充 %I
%~fI - 将 %I 扩充到⼀个完全合格的路径名
%~dI - 仅将 %I 扩充到⼀个驱动器号
%~pI - 仅将 %I 扩充到⼀个路径
%~nI - 仅将 %I 扩充到⼀个⽂件名
%~xI - 仅将 %I 扩充到⼀个⽂件扩展名
%~sI - 扩充的路径只含有短名
%~aI - 将 %I 扩充到⽂件的⽂件属性
%~tI - 将 %I 扩充到⽂件的⽇期/时间
%~zI - 将 %I 扩充到⽂件的⼤⼩
%~$PATH:I - 查列在路径环境变量的⽬录(TTT提⽰:是环境变量path的⽬录),并将 %I 扩充到到的第⼀个完全合格的名称。如果环境变量名未被定义,或者没有到⽂件,此组合键会扩充到空字符串
此外,还可以组合修饰符来得到多重结果:
%~dpI - 仅将 %I 扩充到⼀个驱动器号和路径
%~nxI - 仅将 %I 扩充到⼀个⽂件名和扩展名
%~fsI - 仅将 %I 扩充到⼀个带有短名的完整路径名
%~dp$PATH:i - 查列在路径环境变量的⽬录,并将 %I 扩充到到的第⼀个驱动器号和路径。
%~ftzaI - 将 %I 扩充到类似输出线路的 DIR
在以上例⼦中,%I 和 PATH 可⽤其他有效数值代替。%~ 语法⽤⼀个有效的 FOR 变量名终⽌。选取类似 %I 的⼤写变量名⽐较易读,⽽且避免与不分⼤⼩写的组合键混淆。
(以上是系统帮助的内容)
我们可以看到每⾏都有⼀个⼤写字母"I",这个I其实就是我们在FOR带⼊的变量,例如:
FOR /F "usebackq eol=; tokens=1,2* delims=,- " %%x in ("d:\") do echo %%x %%y %%z
这⾥我们就要把那个x,y,z改成%~fx,%~fy,%~fz。
TTT特例:以下是我根据以上说明作的⼀个综合的例⼦,可以直接复制到记事本⾥,保存为bat格式(c盘下任⼀⽬录),运⾏后,可以直观的看到扩展后的效果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39@echo off
echo---显⽰"dir c:\boot.ini /b /ah"
for /f "delims=="%%i in ('dir c:\boot.ini /b /ah') do echo不扩展变量 %%i
for /f "delims=="%%i in ('dir c:\boot.ini /b /ah') do echo扩展变量到~fI %%~fi --扩充到⼀个完全合格的路径名
for /f "delims=="%%i in ('dir c:\boot.ini /b /ah') do echo扩展变量到~dI %%~di --仅将变量扩充到⼀个驱动器号
for /f "delims=="%%i in ('dir c:\boot.ini /b /ah') do echo扩展变量到~pI %%~pi --仅将变量扩充到⼀个路径
for /f "delims=="%%i in ('dir c:\boot.ini /b /ah') do echo扩展变量到~nI%%~ni--仅将变量扩充到⼀个⽂件名
for /f "delims=="%%i in ('dir c:\boot.ini /b /ah') do echo扩展变量到~xI %%~xi --仅将变量扩充到⼀个⽂件扩展名
for /f "delims=="%%i in ('dir c:\boot.ini /b /ah') do echo扩展变量到~sI%%~si--扩充的路径只含有短名
for /f "delims=="%%i in ('dir c:\boot.ini /b /ah') do echo扩展变量到~aI %%~ai --将变量扩充到⽂件的⽂件属性
for /f "delims=="%%i in ('dir c:\boot.ini /b /ah') do echo扩展变量到~tI %%~ti --将变量扩充到⽂件的⽇期/时间
for /f "delims=="%%i in ('dir c:\boot.ini /b /ah') do echo扩展变量到~zI %%~zi --将变量扩充到⽂件的⼤⼩
for /f "delims=="%%i in ('dir c:\boot.ini /b /ah') do echo扩展变量到~$PATH:I %%~$PATH:i --查列在路径环境变量的⽬录,并将变量扩充到到的第⼀个完全合格的名称
echo---以下显⽰组合修饰符来得到多重结果---:
for /f "delims=="%%i in ('dir c:\boot.ini /b /ah') do echo扩展变量到~dpI %%~dpi --仅将变量扩充到⼀个驱动器号和路径
for /f "delims=="%%i in ('dir c:\boot.ini /b /ah') do echo扩展变量到~nxI %%~nxi --仅将变量扩充到⼀个⽂件名和扩展名
for /f "delims=="%%i in ('dir c:\boot.ini /b /ah') do echo扩展变量到~fsI %%~fsI --仅将变量扩充到⼀个带有短名的完整路径名
for /f "delims=="%%i in ('dir c:\boot.ini /b /ah') do echo扩展变量到~dp$PATH:I %%~dp$PATH:i --查列在路径环境变量的⽬录,并将变量扩充到到的第⼀个驱动器号和路径
for /f "delims=="%%i in ('dir c:\boot.ini /b /ah') do echo扩展变量到~ftzaI %%~ftzai --将变量扩充到类似输出线路的DIR
echo.
echo---显⽰"dir C:\WINDOWS\ /b"
for /f "delims=="%%i in ('dir C:\WINDOWS\ /b') do echo不扩展变量 %%i
for /f "delims=="%%i in ('dir C:\WINDOWS\ /b') do echo扩展变量到~fI %%~fi --扩充到⼀个完全合格的路径名
for /f "delims=="%%i in ('dir C:\WINDOWS\ /b') do echo扩展变量到~dI %%~di --仅将变量扩充到⼀个驱动器号
for /f "delims=="%%i in ('dir C:\WINDOWS\ /b') do echo扩展变量到~pI %%~pi --仅将变量扩充到⼀个路径
for /f "delims=="%%i in ('dir C:\WINDOWS\ /b') do echo扩展变量到~nI%%~ni--仅将变量扩充到⼀个⽂件名
for /f "delims=="%%i in ('dir C:\WINDOWS\ /b') do echo扩展变量到~xI %%~xi --仅将变量扩充到⼀个⽂件扩展名
for /f "delims=="%%i in ('dir C:\WINDOWS\ /b') do echo扩展变量到~sI%%~si--扩充的路径只含有短名
for /f "delims=="%%i in ('dir C:\WINDOWS\ /b') do echo扩展变量到~aI %%~ai --将变量扩充到⽂件的⽂件属性
for /f "delims=="%%i in ('dir C:\WINDOWS\ /b') do echo扩展变量到~tI %%~ti --将变量扩充到⽂件的⽇期/时间
for /f "delims=="%%i in ('dir C:\WINDOWS\ /b') do echo扩展变量到~zI %%~zi --将变量扩充到⽂件的⼤⼩
for /f "delims=="%%i in ('dir C:\WINDOWS\ /b') do echo扩展变量到~$PATH:I %%~$PATH:i --查列在路径环境变量的⽬录,并将变量扩充到到的第⼀个完全合格的名称
echo---以下显⽰组合修饰符来得到多重结果---:
for /f "delims=="%%i in ('dir C:\WINDOWS\ /b') do echo扩展变量到~dpI %%~dpi --仅将变量扩充到⼀个驱动器号和路径
for /f "delims=="%%i in ('dir C:\WINDOWS\ /b') do echo扩展变量到~nxI %%~nxi --仅将变量扩充到⼀个⽂件名和扩展名
for /f "delims=="%%i in ('dir C:\WINDOWS\ /b') do echo扩展变量到~fsI %%~fsI --仅将变量扩充到⼀个带有短名的完整路径名
for /f "delims=="%%i in ('dir C:\WINDOWS\ /b') do echo扩展变量到~dp$PATH:I %%~dp$PATH:i --查列在路径环境变量的⽬录,并将变量扩充到到的第⼀个驱动器号和路径 for /f "delims=="%%i in ('dir C:\WINDOWS\ /b') do echo扩展变量到~ftzaI %%~ftzai --将变量扩充到类似输出线路的DIR
Pause
TTT说明:
1,以上命令中,%%~fsI⽆法显⽰,估计是系统错误,因为%%~fI是扩充到⼀个完全合格的路径名,%%~sI只含有短⽂件名,本⾝是相互⽭盾的,所以出错。不知是系统的错误还是在考我们~~
2,以上命令如果保存在别的盘中,⽆法显⽰正确的驱动器和路径。
3,如果想要%%~dp$PATH:i正常显⽰,要保证环境变量path中确实有这个路径:C:\WINDOWS\system32。
下⾯依次说明⼀下:
⼀、 ~I - 删除任何引号("),扩展 %I
这个变量的作⽤就如他的说明,删除引号!
删除引号规则如下(BAT兄补充!):
1、若字符串⾸尾同时存在引号,则删除⾸尾的引号;
2、若字符串尾不存在引号,则删除字符串⾸的引号;
3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除。 龙卷风补充:⽆头不删,有头连
尾删。
我们来看这个例⼦,⾸先建⽴临时⽂件,内容如下
"1111
"2222"
3333"
"4444"44
"55"55"55
也可建⽴个BAT⽂件代码如下:
1 2 3 4 5 6 7 8 9 10@echo off
echo^"1111&
echo"2222">&
批处理文件注释
echo3333^">&
echo"4444"44>&
echo^"55"55"55>&
rem 上⾯建⽴临时⽂件,注意不成对的引号要加转义字符^,重定向符号前不要留空格 FOR /F "delims="%%i IN () DO echo%%~i
pause
执⾏后,我们看CMD的回显如下:
1111 #字符串前的引号被删除了
2222 #字符串⾸尾的引号都被删除了
3333" #字符串前⽆引号,后⾯的引号保留
4444"44 #字符串前⾯的引号删除了,⽽中间的引号保留
55"55"55 #字符串前⾯的引号删除了,⽽中间的引号保留
请按任意键继续. . .
结果和之前中的内容对⽐⼀下,我们会发现第1、2、5⾏的引号都消失了,这就是删除引号~i的作⽤了!
⼆、 %~fI - 将 %I 扩展到⼀个完全合格的路径名
⽰例:
把代码保存放在随便哪个地⽅,我这⾥就放桌⾯吧.
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~fi
pause
执⾏后显⽰内容如下
C:\Documents and Settings\Administrator\桌⾯\test.bat
C:\Documents and Settings\Administrator\桌⾯\test.vbs
当我把代码中的 %%~fi直接改成%%i
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%i
pause
执⾏后就会显⽰以下内容:
test.bat
test.vbs
通过对⽐,我们很容易就看出没有路径了,这就是"将 %I 扩展到⼀个完全合格的路径名"的作⽤,也就是如果%i变量的内容是⼀个⽂件名的话,他就会把这个⽂件所在的绝对路径打印出来,⽽不只单单打印⼀个⽂件名,⾃⼰动⼿动实验下就知道了!
三、 %~dI - 仅将 %I 扩展到⼀个驱动器号
看例⼦:
代码如下,我还是放到桌⾯执⾏!
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~di
pause
执⾏后我CMD⾥显⽰如下
C:
C:
我桌⾯就两个⽂件test.bat,test.vbs,%%~di作⽤是,如果变量%%i的内容是⼀个⽂件或者⽬录名,他就会把他这⽂件或者⽬录所在的盘符号打印出来!
四、 %~pI - 仅将 %I 扩展到⼀个路径
这个⽤法和上⾯⼀样,他只打印路径不打印⽂件名字
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~pi
pause
我就不打结果了,⼤家⾃⼰复制代码看结果吧,下⾯⼏个都是这么个⽤法,代码给出来,⼤家⾃⼰看结果吧!
五、 %~nI - 仅将 %I 扩展到⼀个⽂件名
只打印⽂件名字
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ni
pause
六、 %~xI - 仅将 %I 扩展到⼀个⽂件扩展名
只打印⽂件的扩展名
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~xi
pause
七、 %~sI - 扩展的路径只含有短名
打印绝对短⽂件名
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~si
pause
⼋、 %~aI - 将 %I 扩展到⽂件的⽂件属性
打印⽂件的属性
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ai
pause
九、 %~tI - 将 %I 扩展到⽂件的⽇期/时间
打印⽂件建⽴的⽇期
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ti
pause
⼗、 %~zI - 将 %I 扩展到⽂件的⼤⼩
打印⽂件的⼤⼩
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~zi
pause
龙卷风补充:上⾯例⼦中的"delims=="可以改为"delims=",即不要分隔符
⼗⼀、 %~$PATH:I - 查列在路径环境变量的⽬录,并将 %I 扩展到到的第⼀个完全合格的名称。如果环境变量名未被定义,或者没有到⽂件,此组合键会扩展到空字符串
这是最后⼀个,和上⾯那些都不⼀样,我单独说说!
然后在把这些代码保存为批处理,放在桌⾯。
@echo off
FOR /F "delims=" %%i IN (“”) DO echo %%~$PATH:i
pause
龙卷风补充:上⾯代码显⽰结果为C:\WINDOWS\
他的意思就在PATH变量⾥指定的路径⾥搜索⽂件,如果有则会把他所在绝对路径打印出来,没有就打印⼀个错误!
(TTT说明,保存到桌⾯上,运⾏显⽰结果为:系统不到⽂件 “”。查看环境变量path中确实有这个路径,不明原因!后来发现了,原来是中⽂引号的原因。
上⾯的命令应该写成:
FOR /F "delims=" %%i IN ("") DO echo %%~$PATH:i
)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论