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退出当前正在执行的批处理。


常用小脚本


拷贝文件


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


查找未占用的ip


echo off
set aa= 192.168.21
:: 注意=号前面不能有空格
set out_file= out_exist.txt
set out_file_1= out_not_exist.txt
for /l %%i in (1,20,100) do (
echo ping %aa%.%%i
ping -n 1  %aa%.%%i | findstr "TTL" >nul && echo %aa%.%%i  >> %out_file% || (
echo can not reached && echo %aa%.%%i  >> %out_file_1% )
)
:: 这是注释
rem "这是注释"
echo "-------------"
:: 这是换行
@echo.
echo ping %out_file% done!


启动程序


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


修改系统的dump文件目录


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


根据条件执行某命令


@echo off
if exist "..\mycmd\backup.exe" (
    echo "backup.exe is exist."
) ^
else (
    echo "backup.exe is not exist. Quit!"
    pause
)
if exist "..\conf\init.data" (
    echo "init.data is exist."
) ^
else (
    echo "init.data is not exist. Quit!"
    pause
)
start cmd /c ""%~dp0..\mycmd\backup.exe" -f %~dp0..\conf\init.data"
pause
@echo on


执行js或VB脚本的mshta命令


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


bat脚本后台执行


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


后台监控某一进程


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


errorlevel程序返回码。


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


开启关闭和加入防火墙


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


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


@echo off
IF "%2"=="" (set MYDIR=.\myDir\) ELSE (set MYDIR=%2)
IF ""=="%1" (set MYSOURCEDIR=.\) ELSE (set MYSOURCEDIR=%1) 
echo Creating \Lib folder
mkdir %MYDIR%     >nul 2>nul
mkdir %MYDIR%\Bin   >nul 2>nul
mkdir %MYDIR%\Bin\x64 >nul 2>nul
xcopy /v /Y "%MYSOURCEDIR%\PRJ\Release No AirPcap\x86\wpcap.dll"  %MYDIR%\Bin\ >nul
xcopy /v /Y "%MYSOURCEDIR%\PRJ\Release No AirPcap\x64\wpcap.dll"  %MYDIR%\Bin\x64 >nul
xcopy /v /Y %MYSOURCEDIR%\Dll\Project\Release\x86\packet.dll    %MYDIR%\Bin\ >nul
xcopy /v /Y %MYSOURCEDIR%\Dll\Project\Release\x64\packet.dll    %MYDIR%\Bin\x64 >nul
echo Folder \Bin created successfully
set MYDIR=
set MYSOURCEDIR=


相关解释:


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


%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %为命令行传递给批处理的参数。

%0 批处理文件本身,包括完整的路径和扩展名。

%1 第一个参数。


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


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


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


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


@echo off
echo %1
echo %~1
echo %0
echo %~f0
echo %~d0
echo %~p0
echo %~n0
echo %~x0
echo %~s0
echo %~a0
echo %~t0
echo %~z0


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



相关资源


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博客


相关文章
|
2月前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
89 0
|
3月前
|
Python Windows
python之windows脚本启动bat
python之windows脚本启动bat
|
4月前
|
安全 Shell Windows
记windows自定义bat脚本自启动
【8月更文挑战第27天】在Windows系统中,可让自定义bat脚本自启动的方法有两种:一是利用“启动”文件夹,通过创建bat脚本的快捷方式并将其放置于该文件夹;二是使用任务计划程序,创建一个启动时触发的任务来运行bat脚本。需确保脚本正确安全,避免对系统产生不良影响。
326 0
|
4月前
|
Windows Python
【Azure 批处理 Azure Batch】在Azure Batch中如何通过开始任务自动安装第三方依赖的一些软件(Windows环境)
【Azure 批处理 Azure Batch】在Azure Batch中如何通过开始任务自动安装第三方依赖的一些软件(Windows环境)
|
6月前
|
Windows
Windows批处理(BAT)文件执行时“一闪而过或闪退”问题及解决方法
Windows批处理(BAT)文件执行时“一闪而过或闪退”问题及解决方法
2444 1
|
6月前
|
Windows
windows系统bat批处理 打开乱码
windows系统bat批处理 打开乱码
52 4
|
6月前
|
Java Windows
windows系统bat批处理 一键配置java jdk环境变量
windows系统bat批处理 一键配置java jdk环境变量
125 4
|
6月前
|
关系型数据库 MySQL 数据安全/隐私保护
windows系统bat批处理 mysql 脚本启动关闭
windows系统bat批处理 mysql 脚本启动关闭
230 3
|
6月前
|
Windows
windows系统bat批处理 网络设置大全 设置静态、动态IP地址
windows系统bat批处理 网络设置大全 设置静态、动态IP地址
1415 2
|
6月前
|
Windows
windows系统bat批处理 打开设备管理器
windows系统bat批处理 打开设备管理器
124 1