批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD。这些命令统称批处理命令。
可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程。
一.Windows中批处理,%~d0 cd %~dp0 代表什么意思
%~dp0 “d”为Drive的缩写,即为驱动器,磁盘、“p”为Path缩写,即为路径,目录
cd是转到这个目录,不过我觉得cd /d %~dp0 还好些
选项语法:
~0 - 删除任何引号("),扩充 %0
%~f0 - 将 %0 扩充到一个完全合格的路径名(“f”是file,即文件)
%~d0 - 仅将 %0 扩充到一个驱动器号
%~p0 - 仅将 %0 扩充到一个路径
%~n0 - 仅将 %0 扩充到一个文件名(“n”是name 文件名)
%~x0 - 仅将 %0 扩充到一个文件扩展名
%~s0 - 扩充的路径只含有短名(“s”为Short,短的)
%~a0 - 将 %0 扩充到文件的文件属性(“a”为attribute,即属性)
%~t0 - 将 %0 扩充到文件的日期/时间(“t”time)
%~z0 - 将 %0 扩充到文件的大小(Size 大小)
%~$PATH:0 - 查找列在路径环境变量的目录,并将 %0 扩充
到找到的第一个完全合格的名称。如果环境变量名
未被定义,或者没有找到文件,此组合键会扩充到
空字符串
可以组合修饰符来得到多重结果:
%~dp0 - 仅将 %0 扩充到一个驱动器号和路径
%~nx0 - 仅将 %0 扩充到一个文件名和扩展名
%~fs0 - 仅将 %0 扩充到一个带有短名的完整路径名
%~dp$PATH:0 - 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个驱动器号和路径。
%~ftza0 - 将 %0 扩充到类似输出线路的 DIR
%0为当前批处理文件
如果0换成1为第一个文件,2为第2个
二.用环境变量快速访问windows目录
今天看同事在我机器上远程调试的过程,他在地址栏上输入%appdata%,就打开了C:\Users\用户名\AppData\Roaming。
用了这么久的windows,我还不知道用环境变量的方法访问目录,由于系统之间有些路径不同,每次用的时候要现查。如果要手动点击进%AppData%,点了几次手指也不舒服,后来装了Clover后,还在书签栏单独给%temp% %appdata%目录添加了书签。不过这些方法都没有通过windows键+R打开运行面板直接输入环境变量舒服。或者也可以在打开资源管理器的情况下,用Alt+D定位到地址栏再输入。
我们可以把一些常用的路径设置成环境变量,这样就可以方便的快速访问了。如下图设置test环境变量后,输入%test%就能访问D:\test目录了。
我在网上找了一份windows的环境变量表,如下:
环境变量 | 详细信息 |
%ALLUSERSPROFILE% | 所有用户 Profile 文件位置 |
%APPDATA% | 应用程序数据的默认存放位置 |
%CD% | 当前目录 |
%CLIENTNAME% | 联接到终端服务会话时客户端的 NETBIOS 名 |
%CMDCMDLINE% | 启动当前 cmd.exe 所使用的命令行 |
%CMDEXTVERSION% | 当前命令处理程序扩展版本号 |
%CommonProgramFiles% | 常用文件的文件夹路径 |
%COMPUTERNAME% | 计算机名 |
%COMSPEC% | 可执行命令外壳(命令处理程序)的路径 |
%DATE% | 当前日期 |
%ERRORLEVEL% | 最近使用的命令的错误代码 |
%HOMEDRIVE% | 用户主目录所在的驱动器盘符 |
%HOMEPATH% | 用户主目录的完整路径 |
%HOMESHARE% | 用户共享主目录的网络路径 |
%LOGONSEVER% | 有效的当前登录会话的域名控制器名 |
%NUMBER_OF_PROCESSORS% | 计算机安装的处理器数 |
%OS% | 操作系统的名字( Windows XP 和 Windows 2000 列为 Windows_NT ) |
%Path% | 可执行文件的搜索路径 |
%PATHEXT% | 操作系统认为可被执行的文件扩展名 |
%PROCESSOR_ARCHITECTURE% | 处理器的芯片架构 |
%PROCESSOR_IDENTFIER% | 处理器的描述 |
%PROCESSOR_LEVEL% | 计算机的处理器的型号 |
%PROCESSOR_REVISION% | 处理器的修订号 |
%ProgramFiles% | Program Files 文件夹的路径 |
%PROMPT% | 当前命令解释器的命令提示设置 |
%RANDOM% | 界于 0 和 32767 之间的随机十进制数 |
%SESSIONNAME% | 连接到终端服务会话时的连接和会话名 |
%SYSTEMDRIVE% | Windows 启动目录所在驱动器 |
%SYSTEMROOT% | Windows 启动目录的位置 |
%TEMP% and %TMP% | 当前登录的用户可用应用程序的默认临时目录 |
%TIME% | 当前时间 |
%USERDOMAIN% | 包含用户帐号的域的名字 |
%USERNAME% | 当前登录的用户的名字 |
%USERPROFILE% | 当前用户 Profile 文件位置 |
%WINDIR% | 操作系统目录的位置 |
三.WINDOWS下DOS命令之Setlocal
开始批处理文件中环境变量的本地化。本地化将持续到出现匹配的 endlocal 命令或者到达批处理文件结尾为止。
语法
setlocal {enableextension | disableextensions} {enabledelayedexpansion | disabledelayedexpansion}
参数
enableextension
启用命令扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
disableextensions
禁用命令扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
enabledelayedexpansion
启用延迟的环境变量扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
disabledelayedexpansion
禁用延迟的环境变量扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
/?
在命令提示符显示帮助。
注释
使用 setlocal
当您在脚本或批处理文件外使用 setlocal 时,将没有效果。
更改环境变量
运行批处理文件时使用 setlocal 更改环境变量。运行 setlocal 后对环境所作的更改在批处理文件本地。Cmd.exe 在遇到 endlocal 命令或者到达批处理文件的结尾时将恢复上一次的设置。
在批处理程序中可以包含多个 setlocal 或 endlocal 命令(嵌套)。
测试批处理文件中的命令扩展
setlocal 命令设置 ERRORLEVEL 变量。如果遇到 {enableextension | disableextensions} 或 {enabledelayedexpansion | disabledelayedexpansion},ERRORLEVEL 变量将设置成 0 (0)。否则,该变量将被设置成 1 (1)。在批处理脚本中使用该命令可以确定扩展是否可用,例如:
verify other 2>nul
setlocal enableextensions
if errorlevel 1 echo Unable to enable extensions因为当禁用命令扩展时 cmd 不会设置 ERRORLEVEL 变量,所以当通过无效参数使用 setlocal 命令时 verify 命令将 ERRORLEVEL 变量初始化为非零值。另外,如果通过 {enableextension | disableextensions} 或 {enabledelayedexpansion | disabledelayedexpansion} 参数使用 setlocal 命令,而且没有将 ERRORLEVEL 变量设置成 1 (1) 时,则命令扩展将不可用。
有关启用或禁用命令扩展的详细信息,请参阅“”中的 cmd。
范例
可以在批处理文件中本地化环境变量,如下所示:
rem *******Begin Comment**************
rem This program starts the superapp batch program on the network,
rem directs the output to a file, and displays the file
rem in Notepad.
rem *******End Comment**************
@echo off
setlocal
path=g:\programs\superapp;%path%
call superapp>c:\superapp.out
endlocal
start notepad c:\superapp.out
四.CMD中Pushd和Popd命令的用法
Pushd和Popd命令,这两个命令一般都是同时使用,意思就是Push和Pop
Pushd 命令
改变当前目录到指定目录,并保存当前的目录在堆栈顶端
Popd 命令
改变当前目录,跳转到堆栈顶端保存的目录,并将堆栈顶端的目录删除
使用 Pushd 命令后,就会将当前目录储存到一个虚拟堆栈中,如果第一次使用 Pushd 命令,该命令所在的目录就会被置于栈底,如再次使用该命令,则第二个目录就会被置于第一个目录之上。
使用 Popd 命令,将当前目录更改为最近由 Pushd 命令存储的目录,并位于堆栈顶端的目录将从堆栈中删除。
@Echo Off
Echo 当前目录:%cd%
pushd C:\Intel\Logs
Echo 当前目录:%cd%
pushd C:\Download
Echo 当前目录:%cd%
pushd C:\WINDOWS
Echo 当前目录:%cd%
popd
Echo 当前目录:%cd%
popd
Echo 当前目录:%cd%
popd
Echo 当前目录:%cd%
Pause