批处理(.bat文件)的使用
bat,即批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。
基本知识
@echo off表示执行了这条命令后关闭所有命令(包括本身这条命令)的回显。而echo off命令则表示关闭其他所有命令(不包括本身这条命令)的回显,@的作用就是关闭紧跟其后的一条命令的回显。
获取当前目录:
方法1:命令 %cd% 或者 !cd! ,取得是运行的环境目录
方法2:命令 %~dp0 ,取得了bat的文件所在目录
@echo off
echo 当前盘符:%~d0
echo 当前盘符和路径:%~dp0
echo 当前盘符和路径的短文件名格式:%~sdp0
echo 当前批处理全路径:%~f0
echo 当前CMD默认目录:%cd%
pause
copy命令
将一份或多份文件复制到另一个位置。
COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B ] source [/A | /B]
[+ source [/A | /B] [+ …]] [destination [/A | /B]]
变量 | 说明 |
---|---|
source | 指定要复制的文件。 |
/A | 表示一个 ASCII 文本文件。 |
/B | 表示一个二进位文件。 |
/D | 允许解密要创建的目标文件 |
destination | 为新文件指定目录和/或文件名。 |
/V | 验证新文件写入是否正确。 |
/N | 复制带有非 8dot3 名称的文件时,尽可能使用短文件名。 |
/Y | 不使用确认是否要覆盖现有目标文件的提示。 |
/-Y | 使用确认是否要覆盖现有目标文件的提示。 |
/Z | 用可重新启动模式复制已联网的文件。 |
/L | 如果源是符号链接,请将链接复制到目标而不是源链接指向的实际文件。 |
例如:
@echo off REM 使用copy命令,写路径时,不要使用/ REM 拷贝一个文件到指定的目录(/y :有重名文件不提示直接覆盖 /-y :提示是否覆盖 默认是/y) REM copy /-y d:\mylog.log e:\ REM 拷贝一个文件到指定的目录并重新命名 REM copy d:\mylog.log d:\mylog2.log REM 拷贝许多文件到指定的目录(指定的目录必须存在) REM copy d:\*.sql e:\123\ REM 拷贝源目录下的所有文件到另一个目录 REM copy e:\123\ e:\1234\ REM 合并多个文件 REM copy /b e:\123\1.txt + e:\123\2.txt e:\123\3.txt
xcopy (外部命令)文件拷贝
复制文件和目录树。
XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B] [/J]
[/EXCLUDE:file1[+file2][+file3]…]
变量 | 说明 |
---|---|
source | 指定要复制的文件 |
destination | 指定新文件的位置和/或名称。 |
/A | 仅复制有存档属性集的文件,但不更改属性。 |
/M | 仅复制有存档属性集的文件,并关闭存档属性。 |
/D:m-d-y | 复制在指定日期或指定日期以后更改的文件。如果没有提供日期,只复制那些源时间比目标时间新的文件。 |
/EXCLUDE:file1[+file2][+file3]… | 指定含有字符串的文件列表。每个字符串在文件中应位于单独的一行。如果任何字符串与复制文件的绝对路径的任何部分相符,则排除复制该文件。例如,指定如 \obj\ 或 .obj 的字符串会分别 排除目录 obj 下面的所有文件或带有.obj 扩展名的所有文件。 |
/P | 创建每个目标文件之前提示你。 |
/S | 复制目录和子目录,不包括空目录。 |
/E | 复制目录和子目录,包括空目录 |
/V | 验证每个新文件的大小。 |
/W | 提示你在复制前按键。 |
/C | 即使有错误,也继续复制。 |
/I | 如果目标不存在,且要复制多个文件,则假定目标必须是目录。 |
/Q | 复制时不显示文件名。 |
/F | 复制时显示完整的源文件名和目标文件名。 |
/L | 显示要复制的文件。 |
/G | 允许将加密文件复制到 不支持加密的目标。 |
/H | 也复制隐藏文件和系统文件。 |
/R | 覆盖只读文件。 |
/T | 创建目录结构,但不复制文件。不包括空目录或子目录。/T /E 包括空目录和子目录。 |
/U | 只复制已经存在于目标中的文件。 |
/K | 复制属性。一般的 Xcopy 会重置只读属性。 |
/N | 用生成的短名称复制。 |
/O | 复制文件所有权和 ACL 信息。 |
/X | 复制文件审核设置(隐含 /O)。 |
/Y | 取消提示以确认要覆盖现有目标文件。 |
/-Y | 要提示以确认要覆盖现有目标文件。 |
/Z | 在可重新启动模式下复制网络文件。 |
/B | 复制符号链接本身与链接目标。 |
/J | 复制时不使用缓冲的 I/O。推荐复制大文件时使用。 |
开关 /Y 可以预先在 COPYCMD 环境变量中设置。
例如:
REM 复制源目录下的所有文件并子文件夹到指定目录(若指定的目录不存在则会新建)(注意:e:\123后不要加\) xcopy e:\123 e:\1234\456\ /s /e /i /y
del命令
删除一个或数个文件。
DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
标识 | 说明 |
---|---|
name | 指定一个或多个文件或者目录列表。通配符可用来删除多个文件。如果指定了一个目录,该目录中的所有文件都会被删除。 |
- | 表示“否”的前缀 |
/P | 删除每一个文件之前提示确认。 |
/F | 强制删除只读文件。 |
/S | 删除所有子目录中的指定的文件。 |
/Q | 安静模式。删除全局通配符时,不要求确认 |
/A | 根据属性选择要删除的文件 |
属性 | R 只读文件 S 系统文件 H 隐藏文件 A 存档文件 I 无内容索引文件 L 重分析点 - 表示“否”的前缀 |
如果命令扩展被启用,DEL 和 ERASE 更改如下:
/S 开关的显示句法会颠倒,即只显示已经删除的文件,而不显示找不到的文件。
rd/?
删除一个目录。
RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
开关 | 作用 |
---|---|
/S | 除目录本身外,还将删除指定目录下的所有子目录和文件。用于删除目录树。 |
/Q | 安静模式,带 /S 删除目录树时不要求确认 |
例如:
REM 删除指定目录下的所有文件(不删除子文件夹下的文件) REM DEL /Q E:\1234\456\ REM 删除指定目录下的所有文件(会删除子文件夹下的文件,但会保留子文件夹) REM DEL /S /Q E:\1234\456\ REM 删除指定目录下的所有,并自身目录 REM RD /S /Q E:\1234\456\
常用例子
以“管理员权限”打开
@echo off mode con lines=30 cols=60 %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit cd /d "%~dp0" rem 下面可以写你的bat代码了
或
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
@echo off :: BatchGotAdmin :------------------------------------- REM --> Check for permissions >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" REM --> If error flag set, we do not have admin. if '%errorlevel%' NEQ '0' ( echo Requesting administrative privileges... goto UACPrompt ) else ( goto gotAdmin ) :UACPrompt echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs" "%temp%\getadmin.vbs"
切换cmd的字符集
//设置cmd的字符集为 UTF-8 (将下面两行写到一个 .bat文件中,双击即可) chcp 65001 cmd //设置cmd的字符集为 GBK (将下面两行写到一个 .bat文件中,双击即可) chcp 936 cmd
判断32位还是64位系统
@echo off setlocal EnableDelayedExpansion if "%PROCESSOR_ARCHITECTURE%" == "X86" ( echo 32位系统 )^ else if "%PROCESSOR_ARCHITECTURE%" == "AMD64" ( echo 64位系统 )^ else ( echo 其他系统 ) pause
删除N天前的文件
REM 以修改时间为准,删除30天前的文件 forfiles /p "E:\test\hello\01" /d -30 /c "cmd /c echo deleting @file ... && del /f @path" pause
REM 指定待删除文件的存放路径(del命令是直接删除,不会到回收站)(如果演示结果无误,把del前面的echo去掉,即可实现真正删除。) set "SrcDir=C:\Test\BatHome" REM 指定天数 set "DaysAgo=1" forfiles /p %SrcDir% /s /m *.* /d -%DaysAgo% /c "cmd /c echo del /f /q /a @path" pause
删除N天前的文件到回收站
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
@echo off REM ------------------------------------------------------------------------------ REM 演示:删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件。 REM 如果演示结果无误,把del前面的echo去掉,即可实现真正删除。 REM Win7/Win8/Win10等系统自带forfiles命令 REM 下载FileRecycle.exe http://bcn.bathome.net/s/tool/index.html?key=FileRecycle REM 将FileRecycle.exe与该bat文件放同一目录 REM ------------------------------------------------------------------------------ REM 指定待删除文件的存放路径 set "SrcDir=." REM 指定天数 set "DaysAgo=30" REM 指定排除的文件名 set "ExcludeFile=test01.html" for /f "delims=" %%i in ('forfiles /p %SrcDir% /s /m *.* /d -%DaysAgo% /c "cmd /c echo @path"') do ( REM 判断排除文件 REM if "%%~nxi" neq "%ExcludeFile%" (echo del /f /q "%%i") REM echo %%~xi 后缀名 REM 若后缀不是.bat 则删除到回收站 if "%%~xi" neq ".bat" ( FileRecycle.exe %%i) ) pause
推荐:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
@echo off REM ------------------------------------------------------------------------------ REM 演示:删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件。 REM 如果演示结果无误,把 Recycle.exe 前面的echo去掉,即可实现真正删除。 REM Win7/Win8/Win10等系统自带forfiles命令 REM 下载Recycle.exe 链接: https://pan.baidu.com/s/1R0cWSCRx2t_ez-hJJ5OTlg 提取码: nnyw REM 将Recycle.exe与该bat文件放同一目录 REM ------------------------------------------------------------------------------ REM 指定待删除文件的存放路径 set "SrcDir=." REM 指定天数 set "DaysAgo=0" REM 指定排除的文件名 set "ExcludeFile=Recycle.exe" for /f "delims=" %%i in ('forfiles /p %SrcDir% /s /m *.* /d -%DaysAgo% /c "cmd /c echo @path"') do ( REM 判断排除文件 REM if "%%~nxi" neq "%ExcludeFile%" (echo del /f /q "%%i") REM echo %%~xi 后缀名 REM 若后缀不是.bat 则删除到回收站 REM if "%%~xi" neq ".bat" (echo Recycle.exe %%i) REM 嵌套if if "%%~nxi" neq "%ExcludeFile%" ( if "%%~xi" neq ".bat" (echo deleting %%i ... && echo Recycle.exe -f %%i) ) ) echo deleted OK. pause
获取日期时间和当前bat文件的目录
@echo off set d=%date:~0,10% set t=%time:~0,8% set dt=%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,8% echo %d% %t% echo %dt% echo %~dp0 pause
在电脑上建立热点,以供手机连接。虚拟无线网卡。
我主要是用 huawei share ,手机与电脑互传文件。
以管理员身份运行命令提示符:
“开始”---在搜索栏输入“cmd”----右键以“管理员身份运行”
REM 参考 https://blog.csdn.net/jajavaja/article/details/8507429 REM 启用并设定虚拟WiFi网卡 (注意:上边命令"ssid"后红字为网络名称,自己随便命名,比如wuminPC可改为MyWiFi等等,自己喜欢怎么命名都行,"Key"后边红字为密码,自己随便命名,比如wuminWiFi 可以改为12345678,总之自己命名就可以了,不一定非得这个网络名称,这个密码,密码8位以上最好) 。输入完该命令后 在控制面板》网络和共享中心》更改适配器设置 可以看到多了一个无线网络连接 类型是Microsoft Virtual WiFi Miniport Adapter REM netsh wlan set hostednetwork mode=allow ssid=MyWiFi key=godisgood REM 禁用该虚拟网络 REM netsh wlan set hostednetwork mode=disallow REM 开启无线网络,即开启Microsoft Virtual WiFi Miniport Adapter netsh wlan start hostednetwork REM 关闭虚拟无线网 REM netsh wlan stop hostednetwork REM 显示无线网络信息命令:netsh wlan show hostednetwork
***************
常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。
昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。