Windows批处理bat基础知识总结大全
这两天在写bat脚本,这是一个痛苦的周末,来个bat的基础知识,留着以后慢慢学。
预定义的变量
下面是些已经被底层定义好可以直接使用的变量:不会出现在 SET 显示的变量列表中
%CD% - 扩展到当前目录字符串。
%DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。
%TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。
%RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。
%ERRORLEVEL% - 扩展到当前 ERRORLEVEL 数值。
%CMDEXTVERSION% - 扩展到当前命令处理器扩展名版本号。
%CMDCMDLINE% - 扩展到调用命令处理器的原始命令行。
%0 bat的完整路径名如"C:\Windows\system32\xxx.bat"
%1 bat参数1依次类推%2参数2...
%path% - 当前的环境变量。以分号隔开的路径列表,路径可包含空格,可以以'\'结尾, 可以以双引号包围之。
参数%0具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。
Windows批处理bat基础知识总结大全
例:最简单的复制文件自身的方法
copy %0 d:\wind.bat
扩展变量
@ 与%i相关的变量(bat参数或者for循环的%i)
假设文件为C:\Documents and Settings\jinsun\桌面\ParseSinglePkgs.bat
%0 C:\Documents and Settings\jinsun\桌面\ParseSinglePkgs.bat
%~dp0 C:\Documents and Settings\jinsun\桌面\
%cd% C:\Documents and Settings\jinsun\桌面
%~nx0 ParseSinglePkgs.bat
%~n0 ParseSinglePkgs
%~x0 .bat
@ 与%VAR%相关的变量
%VAR:str1=str2% 会将VAR中的str1替换为str2(str2如果为空则可以达到删除的效果,str1前可以加*,变量%ABC:*B=%是C)
%VAR:~0,-2% 会提取VAR 变量的所有字符,除了最后两个
%VAR:~2% 会提取VAR 变量的除前两个的所有字符
%VAR:~-2% 会提取VAR 变量的最后两个
%VAR:~2,5% 提取从第2个字符开始的5个字符
在bat文件中,多个命令写在一行或括号内,如果使用行内或括号内定义或修改的变量,需要启用延迟变量扩充,用叹号引用变量。
bat文件中用 setlocal enabledelayedexpansion 启用延迟变量扩充,命令提示符窗口启用延迟变量扩充,用 cmd /v:on
ren命令中的文件名最好加引号,防止文件名包含空格等特殊字符造成的错误。
cd /d %~dp0
批处理文件中的一条语句
意思是 更改当前目录为批处理本身的目录
比如你有个批处理a.bat在D:\qq文件夹下
a.bat内容为
cd /d %~dp0
在这里
cd /d 表示直接转换到后面的路径,否则如果切换盘符,就需要再输入盘符才能切换路径
cd /d %~dp0的意思就是cd /d d:\qq
%0代表批处理本身 d:\qq\a.bat
~dp是变量扩充
d既是扩充到分区号 d:
p就是扩充到路径 \qq
dp就是扩充到分区号路径 d:\qq
%0代指批处理文件自身
%~d0 是指批处理所在的盘符
%~dp0 是盘符加路径
cd %~dp0 就是进入批处理所在目录了
%cd%
%cd%代表当前执行批处理文件的路径(当前路径)
echo %cd%
%CD% 当前文件目录,不显示文件名,切通过其找到其他文件
%0 当前文件本身,包含完整路径名和文件名
如 "C:\Windows\system32\xxx.bat",是一个路径字符串,有引号
*.* 代表所有文件
>和>>它们的作用都是改变各种提示信息的输出方向,把提示信息输出到指定的地方去——各种提示信息默认是输出到屏幕上去的。
单个的>表示以覆盖方式重定向提示信息,也就是说如果目的地原来有内容,将把原来的内容清除掉,用新内容填充;
>>表示以追加的方式重定向提示信息,也就是说,如果目的地原来有内容,原有的内容将保持不变,在原有内容之后追加新内容。
例如:假设d:\test.txt中的内容是:I Love batch。那么,在cmd窗口中,分别使用如下两条语句:echo me,too>d:\test.txt和echo me,too>>d:\test.txt,将会发现,使用第一条语句之后,test.txt中只有一行内容:me,too,而使用第二条语句之后,test.txt中将有两行内容,分别是I Love batch和me,too。
例如:tree /?>help.txt,这条命令语句就把 tree 命令的帮助信息重定向到了help.txt文件中,
help>nul 就把 help 命令的提示信息重定向到了空设备中去(nul表示空设备)。
| 命令管道符
格式:第一条命令 | 第二条命令 [| 第三条命令...]
将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。
例如:
dir c:\|find "txt"
以上命令是:查找C:\所有,并发现TXT字符串。