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 ***