终极dos批处理for循环命令详解

2019-09-19 06:39:05刘景俊

  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								 
			 
相关文章 大家在看