且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

bat tips

更新时间:2022-09-13 19:27:25

1、注释可以用rem和::。::其实是一种错误标签,解释器不理会它,所以可以当做注释。用::做为注释符号可能引起错误,参见这里

2、%var,代表参数,常用于for循环。

%%var,同上,用于bat脚本。(%相当于转义字符吧)

%var%,表示var是一个已声明过的变量。

!var!,同上,用于延迟变量。(参见setlocal enabledelayedexpansion)

3、赋值的等号("=")前后不要有空格,貌似shell也有这个要求。

4、批量给文件添加前缀编号,并将所有新文件名输出到txt文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@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、批量删除文件前缀编号。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@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、使注册表立即生效。(参考这里

1
2
3
4
@echo off
taskkill /im explorer.exe /f
ping -n 2 127.0.0.1 > nul
start c:\windows\explorer.exe

7、让调用的程序独立运行,可以在前面加start。

1
start abc.exe

8、for循环示例,从1累加到10。

1
2
3
4
5
6
7
8
@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函数。

1
2
3
4
:a
arp -d
ping *.*.*.* -n 1 -w 500
goto a

10、流氓软件终结者–只需要一个批处理屏蔽大多数国产杀软卫士


N、...


*** walker * Updated 2012-10-28 ***

本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1214954如需转载请自行联系原作者


RQSLT