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:test.txt") do echo %%x %%y %%z
这里我们就要把那个x,y,z改成%~fx,%~fy,%~fz。
TTT特例:以下是我根据以上说明作的一个综合的例子,可以直接复制到记事本里,保存为bat格式(c盘下任一目录),运行后,可以直观的看到扩展后的效果。
@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:WINDOWSsystem32notepad.exe /b"
for /f "delims==" %%i in ('dir C:WINDOWSsystem32notepad.exe /b') do echo 不扩展变量 %%i
for /f "delims==" %%i in ('dir C:WINDOWSsystem32notepad.exe /b') do echo 扩展变量到~fI %%~fi --扩充到一个完全合格的路径名
for /f "delims==" %%i in ('dir C:WINDOWSsystem32notepad.exe /b') do echo 扩展变量到~dI %%~di --仅将变量扩充到一个驱动器号
for /f "delims==" %%i in ('dir C:WINDOWSsystem32notepad.exe /b') do echo 扩展变量到~pI %%~pi --仅将变量扩充到一个路径
for /f "delims==" %%i in ('dir C:WINDOWSsystem32notepad.exe /b') do echo 扩展变量到~nI %%~ni --仅将变量扩充到一个文件名
for /f "delims==" %%i in ('dir C:WINDOWSsystem32notepad.exe /b') do echo 扩展变量到~xI %%~xi --仅将变量扩充到一个文件扩展名
for /f "delims==" %%i in ('dir C:WINDOWSsystem32notepad.exe /b') do echo 扩展变量到~sI %%~si --扩充的路径只含有短名
for /f "delims==" %%i in ('dir C:WINDOWSsystem32notepad.exe /b') do echo 扩展变量到~aI %%~ai --将变量扩充到文件的文件属性
for /f "delims==" %%i in ('dir C:WINDOWSsystem32notepad.exe /b') do echo 扩展变量到~tI %%~ti --将变量扩充到文件的日期/时间
for /f "delims==" %%i in ('dir C:WINDOWSsystem32notepad.exe /b') do echo 扩展变量到~zI %%~zi --将变量扩充到文件的大小
for /f "delims==" %%i in ('dir C:WINDOWSsystem32notepad.exe /b') do echo 扩展变量到~$PATH:I %%~$PATH:i --查找列在路径环境变量的目录,并将变量扩充到找到的第一个完全合格的名称
echo ---以下显示组合修饰符来得到多重结果---:
for /f "delims==" %%i in ('dir C:WINDOWSsystem32notepad.exe /b') do echo 扩展变量到~dpI %%~dpi --仅将变量扩充到一个驱动器号和路径
for /f "delims==" %%i in ('dir C:WINDOWSsystem32notepad.exe /b') do echo 扩展变量到~nxI %%~nxi --仅将变量扩充到一个文件名和扩展名
for /f "delims==" %%i in ('dir C:WINDOWSsystem32notepad.exe /b') do echo 扩展变量到~fsI %%~fsI --仅将变量扩充到一个带有短名的完整路径名
for /f "delims==" %%i in ('dir C:WINDOWSsystem32notepad.exe /b') do echo 扩展变量到~dp$PATH:I %%~dp$PATH:i --查找列在路径环境变量的目录,并将变量扩充到找到的第一个驱动器号和路径
for /f "delims==" %%i in ('dir C:WINDOWSsystem32notepad.exe /b') do echo 扩展变量到~ftzaI %%~ftzai --将变量扩充到类似输出线路的DIR
Pause









