当前位置:   article > 正文

windows批处理小脚本总结

windows批处理小脚本总结

批处理是Windows自带的一个脚本引擎,语法简洁、内置一些功能强大的命令,并且可以与Windows上的其他软件进行良好的通信。批处理能够提供一系统自动化处理功能,大幅提高日常工作中的一些琐碎重复事情的效率。

概念

批处理(Batch),顾名思义即是指批量处理。批处理是基于dos命令行,Windows默认内置解释器cmd.exe的脚本语言。批处理文件默认保存为.bat或.cmd。
批处理是基于Dos命令行,所以批处理是没有GUI的,是运行在命令提示符终端(Command Prompt Terminal)上的, Command Prompt Terminal也被称为Dos Console。
批处理文件默认的存储格式为ANSI,即使用Windows系统默认的编码格式。

解释器

批处理大小写不敏感。
批处理解释器默认是读取一行代码,然后解释执行。
批处理解释器如果读取到圆括号“(”,则认为直到下一个对应的“)”为结束。此方式可以让批处理解释器一次解释执行多条命令。
CTRL+C退出当前正在执行的批处理。

常用小脚本

拷贝文件

  1. @echo on
  2. ::远端目录位置
  3. set remote_dir=\\192.168.1.2\share\log
  4. ::解析日期
  5. set dateStr=%date:~0,10%
  6. set year=%date:~0,4%
  7. set month=%date:~5,2%
  8. set day=%date:~8,2%
  9. ::得到当前app的log文件名
  10. set app_log= app.%year%-%month%-%day%.log
  11. ::得到UI的log文件名
  12. set ui_log= ui.%year%-%month%-%day%.log
  13. ::得到底层库的log文件名
  14. set base_log= base\\baseModule.%year%.%month%.%day%.log
  15. ::得到分
  16. set timeMin=%time:~3,2%
  17. ::得到秒
  18. set timeSec=%time:~6,2%
  19. ::拷贝日志文件
  20. xcopy %app_log% %remote_dir% /D/Y
  21. xcopy %ui_log% %remote_dir% /D/Y
  22. xcopy %base_log% %remote_dir% /D/Y
  23. pause

查找未占用的ip

  1. echo off
  2. set aa= 192.168.21
  3. :: 注意=号前面不能有空格
  4. set out_file= out_exist.txt
  5. set out_file_1= out_not_exist.txt
  6. for /l %%i in (1,20,100) do (
  7. echo ping %aa%.%%i
  8. ping -n 1 %aa%.%%i | findstr "TTL" >nul && echo %aa%.%%i >> %out_file% || (
  9. echo can not reached && echo %aa%.%%i >> %out_file_1% )
  10. )
  11. :: 这是注释
  12. rem "这是注释"
  13. echo "-------------"
  14. :: 这是换行
  15. @echo.
  16. echo ping %out_file% done!

启动程序 

  1. @echo off
  2. ::当我想运行位于“D:/draw/”的“photoshop.exe”使,应该使用以下命令:
  3. start "" "D:/draw/photoshop.exe"
  4. ::如果想让程序以最大化窗口运行,则使用以下命令:
  5. ::表示以最大化窗口运行程序
  6. start /max "" "D:/draw/photoshop.exe"
  7. taskkill /f /im explorer.exe
  8. start "" "C:\WINDOWS\explorer.exe"
  9. exit

修改系统的dump文件目录 

  1. @echo off
  2. echo opening system autodump...
  3. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps"
  4. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpFolder /t REG_EXPAND_SZ /d "C:\Dumps" /f
  5. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpType /t REG_DWORD /d 2 /f
  6. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpCount /t REG_DWORD /d 10 /f
  7. echo has open
  8. pause
  9. @echo on

根据条件执行某命令 

  1. @echo off
  2. if exist "..\mycmd\backup.exe" (
  3. echo "backup.exe is exist."
  4. ) ^
  5. else (
  6. echo "backup.exe is not exist. Quit!"
  7. pause
  8. )
  9. if exist "..\conf\init.data" (
  10. echo "init.data is exist."
  11. ) ^
  12. else (
  13. echo "init.data is not exist. Quit!"
  14. pause
  15. )
  16. start cmd /c ""%~dp0..\mycmd\backup.exe" -f %~dp0..\conf\init.data"
  17. pause
  18. @echo on

执行js或VB脚本的mshta命令 

  1. echo off
  2. echo "-------------"
  3. mshta "javascript:var a=1; alert(a); close();"
  4. mshta "vbscript:msgbox("content") & msgbox("1234") & window.close"
  5. mshta vbscript:window.execScript("alert('hello world!');","javascript")
  6. mshta javascript:window.execScript("msgBox('hello world!'):window.close","vbs")
  7. @echo.
  8. echo done!

bat脚本后台执行

  1. @echo off
  2. if "%1" == "h" goto begin
  3. mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
  4. :begin
  5. ::下面是你自己的代码

 后台监控某一进程

  1. @echo off
  2. if "%1" == "h" gotobegin
  3. mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
  4. :begin
  5. ::循环后台执行
  6. :start
  7. ping -n 5 127.0.0.1>nul
  8. tasklist|findstr "chrome.exe"
  9. if %errorlevel% == 0 (
  10. echo "is running" >>aa.log
  11. ) else (
  12. echo "is not running" >>aa.log
  13. )
  14. goto start

errorlevel程序返回码。

echo %errorlevel%每个命令运行结束,可以用这个命令行格式查看返回码用于判断刚才的命令是否执行成功默认值为0,一般命令执行出错会设 errorlevel 为1。

 开启关闭和加入防火墙

  1. @echo off
  2. setlocal EnableExpansion
  3. color 3e
  4. title Add MyService
  5. ::开启/关闭公共防火墙
  6. netsh advfirewall set publicprofile state on
  7. netsh advfirewall set publicprofile state off
  8. PUSHD %~DP0 & cd /d "%~dp0"
  9. %1 %2
  10. mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof
  11. :runas
  12. netsh advfirewall firewall delete rule name= "myService" program="C:\Program Files (x86)\Me\MyService.exe"
  13. netsh advfirewall firewall add rule name="myService" dir=in action=allow program="C:\Program Files (x86)\Me\MyService.exe" enable=yes
  14. netsh advfirewall firewall add rule name="myService" dir=out action=allow program="C:\Program Files (x86)\Me\myService.exe" enable=yes
  15. echo myService防火墙例外添加成功
  16. pause >nul
  17. exit

带参数执行的创建目录和拷贝文件

  1. @echo off
  2. IF "%2"=="" (set MYDIR=.\myDir\) ELSE (set MYDIR=%2)
  3. IF ""=="%1" (set MYSOURCEDIR=.\) ELSE (set MYSOURCEDIR=%1)
  4. echo Creating \Lib folder
  5. mkdir %MYDIR% >nul 2>nul
  6. mkdir %MYDIR%\Bin >nul 2>nul
  7. mkdir %MYDIR%\Bin\x64 >nul 2>nul
  8. xcopy /v /Y "%MYSOURCEDIR%\PRJ\Release No AirPcap\x86\wpcap.dll" %MYDIR%\Bin\ >nul
  9. xcopy /v /Y "%MYSOURCEDIR%\PRJ\Release No AirPcap\x64\wpcap.dll" %MYDIR%\Bin\x64 >nul
  10. xcopy /v /Y %MYSOURCEDIR%\Dll\Project\Release\x86\packet.dll %MYDIR%\Bin\ >nul
  11. xcopy /v /Y %MYSOURCEDIR%\Dll\Project\Release\x64\packet.dll %MYDIR%\Bin\x64 >nul
  12. echo Folder \Bin created successfully
  13. set MYDIR=
  14. set MYSOURCEDIR=

相关解释:

引用变量用%var%,调用程序外部参数用%1 至%9 等等。

%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %为命令行传递给批处理的参数。
%0 批处理文件本身,包括完整的路径和扩展名。
%1 第一个参数。

@符号是取消本行的输入显示。

>nul 是屏蔽操作成功显示的信息,但是出错还是会显示(即1>nul)。

2>nul 是屏蔽操作失败显示的信息,如果成功依旧显示。

运行以下代码可以查看各个参数的含义:

  1. @echo off
  2. echo %1
  3. echo %~1
  4. echo %0
  5. echo %~f0
  6. echo %~d0
  7. echo %~p0
  8. echo %~n0
  9. echo %~x0
  10. echo %~s0
  11. echo %~a0
  12. echo %~t0
  13. echo %~z0

运行cmd,输入 c:\test.bat “/a” /b /c /d可以看出每个参数的含意。输出为:

开启windows的自动生成dump功能

  1. @echo off
  2. echo opening system autodump...
  3. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps"
  4. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpFolder /t REG_EXPAND_SZ /d "C:\Dumps" /f
  5. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpType /t REG_DWORD /d 2 /f
  6. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpCount /t REG_DWORD /d 10 /f
  7. echo has open
  8. pause
  9. @echo on

重启资源管理器

  1. @echo off
  2. taskkill /f /im explorer.exe
  3. start "" "C:\WINDOWS\explorer.exe"
  4. #start /d "D:/test/bin" test.exe
  5. exit

 带参数执行某个应用

  1. @echo off
  2. if exist "..\testTool\tool.exe" (
  3. echo "tool.exe is exist."
  4. ) ^
  5. else (
  6. echo "tool.exe is not exist. Quit!"
  7. pause
  8. )
  9. if exist "..\conf\test\init.ini" (
  10. echo "init.iniis exist."
  11. ) ^
  12. else (
  13. echo "init.ini is not exist. Quit!"
  14. pause
  15. )
  16. start cmd /c ""%~dp0..\testTool\test.exe" -f %~dp0..\conf\test\init.ini"
  17. pause
  18. @echo on

相关资源

BAT批处理基本命令总结_whik1194的博客-CSDN博客

Windows 批处理(bat)语法大全_无痕幽雨的博客-CSDN博客_bat 语法

批处理简明教程及示例_-飞鹤-的博客-CSDN博客_批处理

BAT批处理命令详解_Mr雪候鸟的博客-CSDN博客_批处理 /b

【bat批处理脚本命令】bat脚本命令的基本使用(保姆级图文+实现代码)_bat 换行_发现你走远了的博客-CSDN博客

mshta命令用法示例_DOS/BAT_脚本之家

windows 小脚本和命令行总结(方便学习和使用)_An_angel_of_joy的博客-CSDN博客

【最全的】BAT 批处理脚本教程_大渔歌_的博客-CSDN博客_bat教程

.bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别_AlbertS的博客-CSDN博客_%%i 批处理简明教程_蜗牛窝的博客-CSDN博客

 批处理教程_Kelvin_Ngan的博客-CSDN博客_批处理 %%j

让bat文件后台运行 - Bit5566 - 博客园

批处理-从零开始(一)_Jyan_29的博客-CSDN博客_批处理

Windows 批处理(bat)语法大全、BAT批处理基本命令总结_window bat_南北极之间的博客-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/393730?site
推荐阅读
相关标签
  

闽ICP备14008679号