一、变量
%~I - 删除任何引号("),扩展 %I%~fI - 将 %I 扩展到一个完全合格的路径名%~dI - 仅将 %I 扩展到一个驱动器号%~pI - 仅将 %I 扩展到一个路径%~nI - 仅将 %I 扩展到一个文件名%~xI - 仅将 %I 扩展到一个文件扩展名%~sI - 扩展的路径只含有短名%~aI - 将 %I 扩展到文件的文件属性%~tI - 将 %I 扩展到文件的日期/时间%~zI - 将 %I 扩展到文件的大小%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩展到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串
二、输入输出
三、逻辑命令符
四、控制语句
IF [NOT] ERRORLEVEL number commandIF [NOT] string1==string2 commandIF [NOT] EXIST filename command
IF CMDEXTVERSION number commandIF DEFINED variable command
eol=c - 指一个行注释字符的结尾(就一个)skip=n - 指在文件开始时忽略的行数。delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。usebackq - 指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串并且一个单引号字符为文字字符串命令并允许在 file-set中使用双引号扩起文件名称。
五、函数
六、注释
有些时候,我们需要在批处理中使用大段的注释,即连续的注释超过2行。那么,如何实现他呢?
方法有很多种,本文仅列举其中的一部分。
㈠、使用rem
注意:注释中不能使用重定向符和管道符;
当回显处于打开是时,rem 命令及注释内容将被显示;
rem 和注释之间要有空格。
示例:
| rem 注释内容1 rem 注释内容2 rem 注释内容3 |
㈡、使用::
Windows XP 可以识别以冒号 (:) 开头作为标签的批处理程序行并且不会将它作为命令处理。如果某行以冒号开始,则该行的任何命令都将被忽略。
示例:
| :: 注释内容1 :: 注释内容2 :: 注释内容3 |
㈢、使用echo >nul
注意:注释中不能使用重定向符和管道符;
echo 和注释之间要有空格。
示例:
| echo 注释内容1>nul echo 注释内容2>nul echo 注释内容3>nul |
㈣、使用goto
注意:注释中不能使用goto 指向的标签
示例:
| goto han 注释内容1 注释内容2 注释内容3 :han |
㈤、使用:注释
注意:注释中第一个字符不能是数字或字母;
示例:
| :注释内容1 :注释内容2 :注释内容3 |
说明:在实际使用中,例如标签 :stsrt ,我们也可以认为他是注释。如下例:
:: ArgParse.bat - Parser of command line arguments
:: Will Sort - 2005-11-26 - WinXP_CMD/MSDOS7.10/MSDOS6.22 @echo off :Init for %%e in (directory_i directory_o filter_f filter_v log) do set %%e= :ParseLoop if "%1"=="" goto Start for %%s in (i I f F v V l L o O) do if "%1"=="/%%s" goto Switch%%s echo Error: Invalid switch '%1'! goto Quit :SwitchI if "%directory_i%"=="" set directory_i=%2 goto NextArg :SwitchO if "%directory_o%"=="" set directory_o=%2 goto NextArg :SwitchF if "%filter_f%"=="" set filter_f=%2 goto NextArg :SwitchV if "%filter_v%"=="" set filter_v=%2 goto NextArg :SwitchL if "%log%"=="" set log=%2 goto NextArg :NextArg shift shift goto ParseLoop :Start echo.directory_i echo.directory_o echo.filter_f echo.filter_v echo.log :Quit for %%e in (directory_i directory_o filter_f filter_v log) do set %%e= :end |
㈥、使用:标签 注释
示例:
| :han 命令1 命令2 |
㈦、使用if not exist nul 注释
注意:注释中不能使用重定向符和管道符;
if not exist nul 和注释之间要有空格。
示例:
| if not exist nul 注释内容1 if not exist nul 注释内容2 if not exist nul 注释内容3 |