实际工作中,为了方便应用,偶尔会使用一些批处理,但是不总用就忘了,学到的部分就先记到这里.
常用代码
毕竟批处理对于复杂的东西不那么方便,经常还是用python或者其他方式作为主攻,批处理辅助,所以获得拖拽的文件信息是必不可少的.我经常用下面的内容作为起手式.
@echo off
echo 在批处理目录运行 cd /d %~dp0
echo ---当前文件
echo 当前路径: %CD%
echo BAT路径: %0
echo 取文件名(名+扩展名): %~0
echo 取全路径: %~f0
echo 取驱动器名: %~d0
echo 只取路径(不包驱动器): %~p0
echo 只取文件名: %~n0
echo 只取文件扩展名: %~x0
echo 取缩写全路径名: %~s0
echo 取文件属性: %~a0
echo 取文件创建时间: %~t0
echo 取文件大小: %~z0
echo ---获得的文件1
echo 文件全路径: %1
echo 短路径名: %~s1
echo 盘符+路径: %~dp1
echo 盘符: %~d1
echo 路径: %~p1
echo 文件+后缀名: %~nx1
echo 文件名: %~n1
echo 后缀名: %~x1
echo 文件属性: %~a1
echo 日期/时间: %~t1
echo 文件大小: %~z1
for %%i in (%*) do (
echo ---遍历获得的文件
echo 文件全路径: %%i
echo 短路径名: %%~si
echo 盘符+路径: %%~dpi
echo 盘符: %%~di
echo 路径: %%~pi
echo 文件+后缀名: %%~nxi
echo 文件名: %%~ni
echo 后缀名: %%~xi
echo 文件属性: %%~ai
echo 日期/时间: %%~ti
echo 文件大小: %%~zi
)
pause
注释
:: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符)
rem 注释内容(不能出现重定向符号和管道符号)
echo 注释内容(不能出现重定向符号和管道符号)〉nul
if not exist nul 注释内容(不能出现重定向符号和管道符号)
:注释内容(注释文本不能与已有标签重名)
%注释内容%(可以用作行间注释,不能出现重定向符号和管道符号)
goto 标签 注释内容(可以用作说明goto的条件和执行内容)
标签 注释内容(可以用作标签下方段的执行内容)
多行注释的例子,用了一个goto,使中间的部分被忽略了
goto start
= 可以是多行文本,可以是命令
= 可以包含重定向符号和其他特殊字符
= 只要不包含 :start 这一行,就都是注释
:start
一些问题
bat文件执行时乱码
- 多半是先新建了文本文档,然后改的后缀,这样保存的文件在我们电脑上大多是UTF-8编码.打开文件然后另存为ANSI编码就好了.
一些语句
注意啊,下面的注释不符合规范,只是方便观察才这么写的.
如果要实现下列的注释效果,应该用%注释内容%
@ "@"表示不显示"@"后面的命令.
@echo off ::关闭回显.表示此语句后的命令,都不显示命令本身.
echo 你好 ::回显显示你好
echo ::echo后面加个东西可以当作换行,空格也行,其他的比如"echo=","echo+","echo.",等等,据说有很多种方法,其中"echo=","echo,","echo;"会比较快一些
cd ../ ::取上级目录
cd ../../ ::取上上级目录
call c:\ucdos\ucdos.bat ::调用外部批处理
start ::调用外部程序,可接受一些参数,比如MIN最小化之类的.
start https://www.baidu.com ::使用默认浏览器打开网址
start "" "https://www.baidu.com/%var%" ::使用默认浏览器打开复杂的网址
start iexplore https://www.baidu.com ::使用IE打开网址
^ ::一行写不完的话,可以用这个符号一行变多行
% ::转义符
%% ::在批处理文件时,要写两个转义符才能正确执行.
color 3f ::更换背景颜色,炫酷哦
系统变量
系统变量的值由系统将其根据事先定义的条件自动赋值,即
这些变量系统已经给它们定义了值,不需要给它赋值,只需
要调用即可。如下:
变量名 | 作用 | |
---|---|---|
%ALLUSERSPROFILE% | 本地 | 返回 “所有用户” 配置文件的位置 |
%APPDATA% | 本地 | 返回默认情况下应用程序存储数据的位置 |
%CD% | 本地 | 返回当前目录字符串。也就是获得当前路径,并将其转换为字符串 |
%CMDCMDLINE% | 本地 | 返回用来启动当前的 Cmd.exe 的准确命令行 |
%CMDEXTVERSION% | 系统 | 返回当前的 “命令处理程序扩展” 的版本号 |
%COMPUTERNAME% | 系统 | 返回计算机名称 |
%COMSPEC% | 系统 | 返回命令行解释器可执行程序的准确路径。也就是返回 cmd.exe 的路径,一般在 C:\WINDOWS\system32\cmd.exe |
%DATE% | 系统 | 返回当前日期字符串。和使用 date/t 效果一样 |
%ERRORLEVEL% | 系统 | 返回上一条命令的错误代码。通常用 0 表示正确,非0 表示错误 |
%HOMEDRIVE% | 系统 | 返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在 “本地用户和组” 中指定的 |
%HOMEPATH% | 系统 | 返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在 “本地用户和组” 中指定的 |
%HOMESHARE% | 系统 | 返回用户的共享目录的网络路径。基于主目录值而设置。用户主目录是在 “本地用户和组” 中指定的 |
%LOGONSERVER% | 本地 | 返回验证当前登录会话的域控制器的名称 |
%NUMBER_OF_PROCESSORS% | 系统 | 指定安装在计算机上的处理器数目(所有 CPU 的总核心数) |
%OS% | 系统 | 返回操作系统名称 |
%PATH% | 系统 | 指定可执行文件的搜索路径。也就是在这些目录下的可执行文件 (不仅仅是.exe,可以用 echo %PATHEXT% 查看哪些属于可执行文件。)可以直接在开始–>运行里直接执行,当然也可以在命令提示符. 批处理中直接执行。例如记事本文件位于 C:\WINDOWS\NOTEPAD.EXE ,那么我们点击 “开始–>运行,输入 NOTEPAD “ 就可以打开记事本了。或者我们打开 CMD 窗口 ,直接输入 NOTEPAD 也可以打开记事本 |
%PATHEXT% | 系统 | 返回操作系统认为可执行的文件扩展名的列表 |
%PROCESSOR_ARCHITECTURE% | 系统 | 返回处理器的芯片体系结构。返回值为 x86 或 IA64 或 RISC。这些都是常见的架构 ,或者称作指令集。Windows 操作系统都是基于 x86 架构开发的,国产CPU 不是采用 x86 指令集 ,所以无法运行 Windows |
%PROCESSOR_IDENTFIER% | 系统 | 返回处理器说明 |
%PROCESSOR_LEVEL% | 系统 | 返回计算机上安装的处理器型号 |
%PROCESSOR_REVISION% | 返回处理器版本号 | |
%PROMPT% | 本地 | 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成 |
%RANDOM% | 系统 | 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成 |
%SYSTEMDRIVE% | 系统 | 返回包含Windows server operation system根目录(即系统根目录)的驱动器 |
%SYSTEMROOT% | 系统 | 返回 Windows server operation system 根目录位置 |
%TEMP% 和 %TMP% | 系统用户 | 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其他应用程序则需要 TMP |
%TIME% | 系统 | 返回当前时间字符串。使用与 time /t 命令相同的格式 |
%USERDOMAIN% | 本地 | 返回包含用户账户的域的名称 |
%USERNAME% | 本地 | 返回当前登录的用户的名称 |
%USERPROFILE% | 本地 | 返回当前用户的配置文件的位置 |
%WINDIR% | 系统 | 返回操作系统目录的位置 |
win10系统,登录用户:siwuxie095,testx.bat保存在桌面,测试如下:
- %ALLUSERSPROFILE%
- %APPDATA%
- %CD%
- %CMDCMDLINE%
- %CMDEXTVERSION%
- %COMPUTERNAME%
- %COMSPEC%
- %DATE%
- %ERRORLEVEL%
- %HOMEDRIVE%
- %HOMEPATH%
- %HOMESHARE%
- %LOGONSERVER%
- %NUMBER_OF_PROCESSORS%
- %OS%
- %PATH%
- %PATHEXT%
- %PROCESSOR_ARCHITECTURE%
- %PROCESSOR_IDENTFIER%
- %PROCESSOR_LEVEL%
- %PROCESSOR_REVISION%
- %PROMPT%
- %RANDOM%
- %SYSTEMDRIVE%
- %SYSTEMROOT%
- %TEMP%
- %TMP%
- %TIME%
- %USERDOMAIN%
- %USERNAME%
- %USERPROFILE%
- %WINDIR%
应用:
如:利用 %PROCESSOR_ARCHITECTURE% 判断当前计算机是几位的
@echo off
if "%PROCESSOR_ARCHITECTURE:~0,3%" equ "x86" (echo 32位计算机) else echo 64 位计算机
pause>nul
sublime中:
运行一览:
如:利用系统变量实现清理系统垃圾
@echo off
title 清除 Windows 10 系统垃圾
del /f /s /q %systemdrive%\*.tmpdel /f /s /q %systemdrive%\*._mp
del /f /s /q %systemdrive%\*.log
::帮助的临时文件
del /f /s /q %systemdrive%\*.gid
::丢失簇的恢复文件
del /f /s /q %systemdrive%\*.chk
::旧备份文件
del /f /s /q %systemdrive%\*.old
del /f /s /q %systemdrive%\recycled\*.*
::临时备份文件
del /f /s /q %windir%\*.bak
::删除上网预读信息
del /f /s /q %windir%\prefetch\*.*
::直接删除 C:\Windows\temp 文件夹 ,并新建 temp 文件夹。
rd /s /q %windir%\temp & md %windir%\temp
::删除用户名下的 cookies 文件夹内容。
del /f /q "%userprofile%\cookies\*.*"
::删除最近浏览文件的快捷方式
del /f /q "%userprofile%\recent\*.*"
::清除用户临时页面文件
del /f /s /q "%userprofile%\Local Settings\TemporaryInternetFiles\*.*"
::清除用户临时文件
del /f /s /q "%userprofile%\Local Settings\Temp\*.*"
del /f /s /q "f:\Temporary Internet Files\*.*"
del /f /s /q "%userprofile%\recent\*.*"
::删除 C 盘安装信息文件
del /f /s /q "C:\Program Files\Installshield InstallationInformation\*.*"
::删除升级补丁信息del /f /s /q "C:\WINDOWS\SoftwareDistribution\Download\*.*"
::删除历史记录rd /s /q "%userprofile%\Local Settings\History"
dir %SystemRoot%\$*$ /ad/b >%SystemRoot%\vTmp.txt
for /f %%a in (%SystemRoot%\vTmp.txt) do rd /s /q"
%SystemRoot%\%%a"
echo 清除系统垃圾完成 !& pause