1、注释可以用rem和::。::其实是一种错误标签,解释器不理会它,所以可以当做注释。用::做为注释符号可能引起错误,参见这里。
2、%var,代表参数,常用于for循环。
%%var,同上,用于bat脚本。(%相当于转义字符吧)
%var%,表示var是一个已声明过的变量。
!var!,同上,用于延迟变量。(参见setlocal enabledelayedexpansion)
3、赋值的等号("=")前后不要有空格,貌似shell也有这个要求。
4、批量给文件添加前缀编号,并将所有新文件名输出到txt文件。
@echo off title 批量添加前缀编号(walker) setlocal EnableDelayedExpansion set /p idx=起始编号: set /a idx=%idx% rem 循环当前目录下所有文档的文件名,支持带空格的名称 for /f "delims=" %%i in ('dir /b *.txt') do ( set old_name=%%i set pre=0000!idx! set new_name=!pre:~-4!_!old_name! rem 下面一句^为转义字符 echo !old_name! -^> !new_name! ren "!old_name!" "!new_name!" echo !new_name! >> list.txt set /a idx+=1 ) echo 批量重命名完成! pause
5、批量删除文件前缀编号。
@echo off title 批量删除前缀编号(walker) setlocal EnableDelayedExpansion rem 循环当前目录下所有文档的文件名,支持带空格的名称 for /f "delims=" %%i in ('dir /b *.txt') do ( set old_name=%%i set pre=!old_name:~0,4! set isNum=false rem 管道符号前面不能有空格 echo !pre!| findstr "[^0-9]">nul && (set isNum=false) || (set isNum=true) if !isNum!==false ( echo !old_name! 不会被重命名 ) else ( set new_name=!old_name:~5! rem 下面一句^为转义字符 echo !old_name! -^> !new_name! ren "%%i" "!new_name!" ) ) echo 批量重命名完成! pause
6、使注册表立即生效。(参考这里)
@echo off taskkill /im explorer.exe /f ping -n 2 127.0.0.1 > nul start c:\windows\explorer.exe
7、让调用的程序独立运行,可以在前面加start。
start abc.exe
8、for循环示例,从1累加到10。
@echo off setlocal enabledelayedexpansion set /a sum=0 for /L %%i in (1,1,10) do ( set /a sum=sum + %%i ) echo !sum! pause
9、简单处理arp***,下面的ping命令主要是为了延时(500ms),因为bat没有sleep函数。
:a arp -d ping *.*.*.* -n 1 -w 500 goto a
10、流氓软件终结者–只需要一个批处理屏蔽大多数国产杀软卫士。
11、bat 当前目录
# 当前盘符 %~d0 # 当前目录 %cd%
N、...
*** walker * Updated 2012-10-28 ***
转载于:https://blog.51cto.com/walkerqt/1214954