参考资源 windows CMD命令大全及详细解释和语法
符号 | 含义 |
---|---|
CR(0D) | 命令行结束符 |
Escape(1B) | ANSI转义字符引导符 |
Space(20) | 常用的参数界定符 |
Tab(09) ; = | 不常用的参数界定符 |
+ | COPY命令文件连接符 |
* ? | 文件通配符 |
“” | 字符串界定符 |
| | 命令管道符 |
< > >> | 文件重定向符 |
@ | 命令行回显屏蔽符 |
/ | 参数开关引导符 |
: | 批处理标签引导符 |
% | 批处理变量引导符 |
1. 百分号%
set A="Test"
echo %A%
::A的打印输出为"Test"
2. echo符号
set A="Test"
Echo %A%
:: 会打印"Test"
@echo on
echo A
:: 会打印
:: D:\Temp > echo A
:: A
@echo off
echo A
:: 会打印
:: A
参考资源 windows CMD命令大全及详细解释和语法
for %%variable in (set) do command
例子
@echo off
set str=c d e f g h i j k l m n o p q r s t u v w x y z
echo 当前硬盘的分区有:
for %%i in (%str%) do (
if exist %%i: echo %%i:
)
对一组文件中的每一个文件执行某个特定命令。命令扩展名被启用,下列额外的 FOR 命令格式会受到支持
:: 如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配
FOR /D %variable IN (set) DO command [command-parameters]
:: 检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。如果在 /R 后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
:: 该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生序列 (5 4 3 2 1)
FOR /L %variable IN (start,step,end) DO command [command-parameters]
更多详细信息请见参考资源
参考资源 How can I compare two files in a batch file?
@echo on
fc D:\Temp\test\build1.txt D:\Temp\test\build2.txt > nul
if %errorlevel%==1 (
rd /s /q D:\Temp\test\AA\
)
errorlevel的值的含义
值 | 含义 |
---|---|
-1 | 无效的语法(例如,仅传递了一个文件) |
-2 | 文件相同 |
1 | 文件不同 |
2 | 找不到至少一个文件 |
使用errorlevel全局变量获取是否相等,不相等则做其他的事
1. 寻找进程
tasklist | find "ArcGISEarth.exe"
if %%errorlevel%%==0 (command)
}
判断某个进程是否在运行中,errorlevel为0则代表该进程正在运行
2. 结束进程
taskkill /F /T /IM "ArcGISEarth.exe"
参数 | 含义 |
---|---|
/S | System 指定要连接到的远程系统 |
/U | [domain]user 指定应该在哪个用户上下文执行这个命令 |
/P | [password] 为提供的用户上下文指定密码。如果忽略,提示输入 |
/F | 强行终止进程 |
/FI | Filter 指定筛选进或筛选出查询的的任务 |
/PID | processID 指定要终止的进程的PID |
/IM | ImageName 指定要终止的进程的映像名,通配符 '*'可用来指定所有映像名 |
/T | Tree kill 终止指定的进程和任何由此启动的子进程 |
/? | 显示帮助/用法 |
经常用到参数应该就是/F,可以强制结束某个进程
一个使用案例是判断该进程是否正在运行,如果是则结束该进程,注意,从获取进程到结束进程中需要有一定时间间隔,然后才能结束进程,这里例子中间隔2s
tasklist /FI "IMAGENAME eq ArcGISEarth.exe" 2>NUL | find /I /N "ArcGISEarth.exe">NUL
ping -n 2 127.0.0.1>nul
if %errorlevel%==0 (taskkill /F /T /IM "ArcGISEarth.exe")
发现了一个更好的方法去结束程序
符号 | 含义 |
---|---|
2>null | 不显示错误提示 |
1>null | 不显示正确提示 |
128 | 找不到特定程序错误提示的返回代码 |
0 | 找到特定程序并结束进程的返回代码 |
@echo on
:: 不显示错误提示
taskkill /F /T /IM "ArcGISEarth.exe" 2>null
:: Earth已经正常自动关闭
if %errorlevel%==128 (echo "ArcGIS Earth end normally")
:: 强制关闭Earth
if %errorlevel%==0 (echo "ArcGIS Earth end Forcibly")
:: 暂停几秒
ping -n 4 127.0.0.1>nul
1. 字符串替换
set text="12345678"
set name=%text:12=00%
echo %name%
:: 输出00345678
参考资源 bat删除文件及文件夹
1. 文件的创建和删除
创建文件,以下两种方式均可以,注意如果有同名文件会默认覆盖
echo > Test.txt
echo => Text.txt
删除(Delete)文件
del D:\Temp\Test.txt /F /S /Q /A
参数 | 含义 |
---|---|
/F | 强制删除 |
/S | 从所有子目录删除指定文件 |
/Q | 安静模式,删除文件时不需要提示 |
/A | 根据属性选择要删除的文件 |
2. 文件夹的创建和删除
创建文件夹,使用md或者mkdir(Make directory)关键字
:: 这两个关键字作用一致
md D:\Temp\Dir1\
mkdir D:\Temp\Dir2\
:: 创建多个文件夹,用空格分隔
mkdir D:\Temp\Dir1\ D:\Temp\Dir2\
:: 假设Dir1原本不存在,执行该命令后会自动创建中间目录Dir1
mkdir D:\Temp\Dir1\SubDir\
删除文件夹 (Remove directory)
:: 这两个关键字作用一致
rd /S /Q D:\Temp\
rmdir /S /Q D:\Temp\
参数 | 含义 |
---|---|
/S | 从所有子目录删除指定文件 |
/Q | 安静模式,删除文件时不需要提示 |
复制(Copy)文件
:: 复制A.txt文件到 Dir1目录下,这时存在D:Temp\Dir1\A.txt 文件
copy D:Temp\A.txt D:Temp\Dir1\
:: 复制A.txt文件到 Dir1目录下,并更名为B.txt, 这时存在 D:Temp\Dir1\B.txt 文件
copy D:Temp\A.txt D:Temp\Dir1\B.txt
参数 | 含义 |
---|---|
/A | 表示一个 ASCII 文本文件 |
/B | 表示一个二进位文件 |
/D | 允许解密要创建的目标文件 |
/V | 为新文件指定目录和/或文件名 |
/N | 复制带有非 8dot3 名称的文件时,尽可能使用短文件名 |
/Y | 不使用确认是否要改写现有目标文件的提示 |
/-Y | 使用确认是否要改写现有目标文件的提示 |
/Z | 用可重新启动模式复制已联网的文件 |
复制文件夹
:: 将Dir1 文件夹中所有文件 复制到 Dir2文件夹
xcpoy D:Temp\Dir1\ D:Tem\Dir2\ /D /S /Q /I /Y
参数 | 含义 |
---|---|
/A | 只复制有存档属性集的文件,但不改变属性 |
/M | 只复制有存档属性集的文件, 并关闭存档属性 |
/D | 复制在指定日期或指定日期以后更改的文件, 如果没有提供日期,只复制那些源时间, 比目标时间新的文件 |
/EXCLUDE | 排除指定含有字符串的文件列表,如 /E:*.png 则表示不复制 png 文件 |
/P | 在创建每个目标文件前提示 |
/S | 复制目录和子目录,除了空的 |
/E | 复制目录和子目录,包括空的 |
/V | 验证每个新文件 |
/W | 提示在复制前按键 |
/C | 即使有错误,也继续复制 |
/I | 如果目标不存在,而又在复制一个以上的文件,则假定目标一定是一个目录 |
/Q | 复制时不显示文件名 |
/F | 复制时显示完整的源和目标文件名 |
/L | 显示要复制的文件 |
/G | 允许将没有经过加密的文件复制到不支持加密的目标 |
/H | 也复制隐藏和系统文件 |
/R | 覆盖只读文件 |
/T | 创建目录结构,但不复制文件,不包括空目录或子目录 |
/U | 只复制已经存在于目标中的文件 |
/K | 复制属性,一般的 xcopy 会重置只读属性 |
/N | 用生成的短名复制 |
/O | 在写入destination的文件中保留所有权和访问控制列表(ACL)信息 |
/X | 复制文件审核设置和系统访问控制列表(SACL)信息 |
/Y | 阻止xcopy命令提示您覆盖目标中已存在的源文件 |
/-Y | 强制xcopy命令提示您有关覆盖文件的信息 |
/Z | 在网络连接丢失时安全地停止复制文件,然后在重新建立连接后从中断处恢复复制 |
参考 资源
当我们想直接删除文件夹时可能会遇到这种错误,这是因为这个文件夹里面的文件有些是只读属性,所以访问受限
我们需要将这个目录下的所有文件设置成非只读属性,然后才能删除
attrib -r E:\Applications\DotNet\WinDesktop\Apps\arcgis-earth\*.* /s /d
参数 | 含义 |
---|---|
±R | 设置/移除 只读属性 |
±A | 设置/移除 存档属性 |
±S | 设置/移除 系统属性 |
±H | 设置/移除 隐藏属性 |
±O | 设置/移除 脱机属性 |
±I | 设置/移除 无内容引索属性 |
±X | 设置/移除 无清理属性 |
±V | 设置/移除 完整性属性 |
±P | 设置/移除 固定属性 |
±U | 设置/移除 非固定属性 |
/S | 处理当前文件夹及其所有子文件夹中的匹配文件 |
/D | 处理文件夹 |
/L | 处理符号链接和符号链接目标的属性 |
1. 判断字符串
判断字符串可以直接使用==
set var_1=%1
if %var_1%=="test" (echo "var_1 = test")
2. 判断数值
符号 | 含义 |
---|---|
EQU | 等于 |
NEQ | 不等于 |
LSS | 小于 |
LEQ | 不小于 |
GTR | 大于 |
GEQ | 不大于 |
set var_1=5
if %var_1% equ 5 (echo "var_1 = 5")
结合errorlevel使用,当一条命令正确执行后 errorlevel值为0,否则不为0,比如
xcopy D:\temp\ E:\temp\
if %errorlevel% neq 0 (echo "xcopy file failed!")
@echo off
set var1=%1
set var2=%2
if var
call :Func1
Call :Func2
pause
::=====================
::函数名称
::=====================
:Func1
set aa=%var1%
echo %aa%
goto:eof
::=====================
::函数名称
::=====================
:Func2
set aa=%var2%
echo %aa%
goto:eof