bat & cmd 命令知识点整理(待更新)
文章目录
参考
零、基础概念
-
【问】bat和cmd区别,参考cmd指令,bat脚本【完美解析】
Note:-
共同点:
-
区别:
-
cmd
是Win32
命令,只能在32位系统中的命令行窗口中使用,仅仅是基于windows
环境下的假DOS。(cmd
中不能正常执行echo %~sdp0
,但是运行bat
批处理程序就可以,参考CMD获取当前目录路径) -
bat
是DOS
命令(批处理命令),在任何dos
环境下都可以使用。
-
-
-
【问】如何查看cmd命令
Note:-
如果找不到
help
命令,参考cmd显示help不是内部或外部命令,也不是可运行的程序或批处理文件 -
help
命令如下:C:\Users\THINKPAD>help 有关某个命令的详细信息,请键入 HELP 命令名 ASSOC 显示或修改文件扩展名关联。 ATTRIB 显示或更改文件属性。 BREAK 设置或清除扩展式 CTRL+C 检查。 BCDEDIT 设置启动数据库中的属性以控制启动加载。 CACLS 显示或修改文件的访问控制列表(ACL)。 CALL 从另一个批处理程序调用这一个。 CD 显示当前目录的名称或将其更改。 CHCP 显示或设置活动代码页数。 CHDIR 显示当前目录的名称或将其更改。 CHKDSK 检查磁盘并显示状态报告。 CHKNTFS 显示或修改启动时间磁盘检查。 CLS 清除屏幕。 CMD 打开另一个 Windows 命令解释程序窗口。 COLOR 设置默认控制台前景和背景颜色。 COMP 比较两个或两套文件的内容。 COMPACT 显示或更改 NTFS 分区上文件的压缩。 CONVERT 将 FAT 卷转换成 NTFS。你不能转换 当前驱动器。 COPY 将至少一个文件复制到另一个位置。 DATE 显示或设置日期。 DEL 删除至少一个文件。 DIR 显示一个目录中的文件和子目录。 DISKPART 显示或配置磁盘分区属性。 DOSKEY 编辑命令行、撤回 Windows 命令并 创建宏。 DRIVERQUERY 显示当前设备驱动程序状态和属性。 ECHO 显示消息,或将命令回显打开或关闭。 ENDLOCAL 结束批文件中环境更改的本地化。 ERASE 删除一个或多个文件。 EXIT 退出 CMD.EXE 程序(命令解释程序)。 FC 比较两个文件或两个文件集并显示 它们之间的不同。 FIND 在一个或多个文件中搜索一个文本字符串。 FINDSTR 在多个文件中搜索字符串。 FOR 为一组文件中的每个文件运行一个指定的命令。 FORMAT 格式化磁盘,以便用于 Windows。 FSUTIL 显示或配置文件系统属性。 FTYPE 显示或修改在文件扩展名关联中使用的文件 类型。 GOTO 将 Windows 命令解释程序定向到批处理程序 中某个带标签的行。 GPRESULT 显示计算机或用户的组策略信息。 GRAFTABL 使 Windows 在图形模式下显示扩展 字符集。 HELP 提供 Windows 命令的帮助信息。 ICACLS 显示、修改、备份或还原文件和 目录的 ACL。 IF 在批处理程序中执行有条件的处理操作。 LABEL 创建、更改或删除磁盘的卷标。 MD 创建一个目录。 MKDIR 创建一个目录。 MKLINK 创建符号链接和硬链接 MODE 配置系统设备。 MORE 逐屏显示输出。 MOVE 将一个或多个文件从一个目录移动到另一个 目录。 OPENFILES 显示远程用户为了文件共享而打开的文件。 PATH 为可执行文件显示或设置搜索路径。 PAUSE 暂停批处理文件的处理并显示消息。 POPD 还原通过 PUSHD 保存的当前目录的上一个 值。 PRINT 打印一个文本文件。 PROMPT 更改 Windows 命令提示。 PUSHD 保存当前目录,然后对其进行更改。 RD 删除目录。 RECOVER 从损坏的或有缺陷的磁盘中恢复可读信息。 REM 记录批处理文件或 CONFIG.SYS 中的注释(批注)。 REN 重命名文件。 RENAME 重命名文件。 REPLACE 替换文件。 RMDIR 删除目录。 ROBOCOPY 复制文件和目录树的高级实用工具 SET 显示、设置或删除 Windows 环境变量。 SETLOCAL 开始本地化批处理文件中的环境更改。 SC 显示或配置服务(后台进程)。 SCHTASKS 安排在一台计算机上运行命令和程序。 SHIFT 调整批处理文件中可替换参数的位置。 SHUTDOWN 允许通过本地或远程方式正确关闭计算机。 SORT 对输入排序。 START 启动单独的窗口以运行指定的程序或命令。 SUBST 将路径与驱动器号关联。 SYSTEMINFO 显示计算机的特定属性和配置。 TASKLIST 显示包括服务在内的所有当前运行的任务。 TASKKILL 中止或停止正在运行的进程或应用程序。 TIME 显示或设置系统时间。 TITLE 设置 CMD.EXE 会话的窗口标题。 TREE 以图形方式显示驱动程序或路径的目录 结构。 TYPE 显示文本文件的内容。 VER 显示 Windows 的版本。 VERIFY 告诉 Windows 是否进行验证,以确保文件 正确写入磁盘。 VOL 显示磁盘卷标和序列号。 XCOPY 复制文件和目录树。 WMIC 在交互式命令 shell 中显示 WMI 信息。 有关工具的详细信息,请参阅联机帮助中的命令行参考。
-
一、bat
基础命令
参考bat 脚本基础知识、命令详解,Windows批处理文件(.bat文件和.cmd文件)简单使用,cmd指令,bat脚本【完美解析】
-
【问】如何关闭打印文件内容?(
@
和echo off
设置命令内容不被打印)Note:
-
@echo off
:通常我们将这条指令写在我们批处理文件的第一行,因为有了这条指令之后,当我们在运行.bat
的时候,就不会将文件里面的内容打印出来了,如果没有这句话,会先去将文件里面的内容打印在屏幕上。 -
echo off
:这条指令之后的内容不会被打印,但是这个指令会被打印 -
@
:某一条指令不想被打印,可以在前面加上@
-
-
【问】如何设置变量值,打印变量和打印空行?(
set
设置值,echo
打印值)Note:
-
设置变量值:注意等号左边不能有空格,等号右边的空格会被当做字符串的一部分;
set a=1 set wang=wang
-
在控制台打印变量:需要在变量的前后带上
%
,然后使用echo
命令回显变量;echo %a% echo %wang%
-
打印空行:
echo.
(.
必须紧跟在echo
命令的后面),.
也可以被,:
,;
,或/
等任一的符号代替,实现回车空行打印。echo. echo: echo;
-
-
Note:
-
rem set a=1
:注释指令打印在控制台上 -
::set b=2
:注释指令不会打印在控制台
-
-
【问】如何暂停和继续执行命令?(
pause
暂停,方便检查控制台输出;按任意键可以继续执行该文件)Note:
-
希望在暂停时,不要在屏幕上显示“请按任意键以继续”,而是显示自己的语句:
echo 其他提示语 & pause > nul
-
-
【问】如何启动一个单独的窗口来运行指定的程序或命令?(
start 程序名 程序参数
)Note:
-
查看
start
相关参数:> help start 启动一个单独的窗口以运行指定的程序或命令。 START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL] [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B] [command/program] [parameters] "title" 在窗口标题栏中显示的标题。 path 启动目录。 B 启动应用程序,但不创建新窗口。 应用程序已忽略 ^C 处理。除非应用程序 启用 ^C 处理,否则 ^Break 是唯一可以中断 该应用程序的方式。 I 新的环境将是传递 给 cmd.exe 的原始环境,而不是当前环境。 MIN 以最小化方式启动窗口。 MAX 以最大化方式启动窗口。 SEPARATE 在单独的内存空间中启动 16 位 Windows 程序。 SHARED 在共享内存空间中启动 16 位 Windows 程序。 LOW 在 IDLE 优先级类中启动应用程序。 NORMAL 在 NORMAL 优先级类中启动应用程序。 HIGH 在 HIGH 优先级类中启动应用程序。 REALTIME 在 REALTIME 优先级类中启动应用程序。 ABOVENORMAL 在 ABOVENORMAL 优先级类中启动应用程序。 BELOWNORMAL 在 BELOWNORMAL 优先级类中启动应用程序。 NODE 将首选非一致性内存结构(NUMA)节点指定为 十进制整数。 AFFINITY 将处理器关联掩码指定为十六进制数字。 注意: 在 64 位平台上不支持 SEPARATE 和 SHARED 选项。 通过指定 /NODE,可按照利用 NUMA 系统中的内存区域的方式 创建进程。例如,可以创建两个完全 通过共享内存互相通信的进程以共享相同的首选 NUMA 节点, 从而最大限度地减少内存延迟。只要有可能, 它们就会分配来自相同 NUMA 节点的 内存,并且会在指定节点之外的处理器上自由运行。 start /NODE 1 application1.exe start /NODE 1 application2.exe 这两个进程可被进一步限制在相同 NUMA 节点内的指定处理器 上运行。在以下示例中,application1 在 节点的两个低位处理器上运行,而 application2 在该节点的其后两个处理器上运行。该示例假定指定节点至少具有四个逻辑处理器。请注意,节点号可更改为该计算机的任何有效节点号, 而无需更改关联掩码。 start /NODE 1 /AFFINITY 0x3 application1.exe 启动 /NODE 1 /AFFINITY 0xc application2.exe 如果命令扩展被启用,通过命令行或 START 命令的外部命令 调用会如下改变: 将文件名作为命令键入,非可执行文件可以通过文件关联调用。 (例如,WORD.DOC 会调用跟 .DOC 文件扩展名关联的应用程序)。 关于如何从命令脚本内部创建这些关联,请参阅 ASSOC 和 FTYPE 命令。 执行的应用程序是 32 位 GUI 应用程序时,CMD.EXE 不等应用 程序终止就返回命令提示符。如果在命令脚本内执行,该新行为 则不会发生。 如果执行的命令行的第一个符号是不带扩展名或路径修饰符的
-
常用的
start
命令为:start 程序名 程序参数
用来调用批处理文件的同级目录下的程序。start iexplore http:\www.baidu.com \使用IE浏览器打开百度 start chrome http:\www.baidu.com \使用chrome浏览器打开百度 start wps \打开wps文档 start wps hello.doc \使用wps打开hello.doc文档
-
-
【问】如何在某一批处理程序中调用另外一个batch文件?(
call c:\code\temp.bat
)Note:
-
main.bat
:echo my name is main.bat call temp.bat pause
-
temp.bat
:echo my name is temp.bat
-
call main.bat
:D:\programSoftware\Java\java1.8\test>call main.bat D:\programSoftware\Java\java1.8\test>echo my name is main.bat my name is main.bat D:\programSoftware\Java\java1.8\test>call temp.bat D:\programSoftware\Java\java1.8\test>echo my name is temp.bat my name is temp.bat D:\programSoftware\Java\java1.8\test>pause 请按任意键继续. . .
-
二、bat
常见变量
参考cmd指令,bat脚本【完美解析】,.bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别,CMD获取当前目录路径
-
【问】
%0
表示什么?(批处理文件名,%1
表示批处理程序传入的第一个参数)Note:
-
在批处理程序中
%0
表示这个批处理程序的文件名,%1
表示调用这个批处理时传入的第1个参数,%2
表示调用这个批处理时传入的第2个参数,最大可以到%9
。 -
举个例子:
temp.bat
:@echo off echo param0=%0 echo param0=%1 echo param0=%2
输出:
C:\Users\Administrator\Downloads>temp.bat “hello world” param0=temp.bat param1=“hello world” param2=
-
-
Note:
for
循环在cmd
命令行中的固定用法for %i in (set) do (...)
,循环变量格式为%i
-
Note:
for
循环在bat
处理程序中的固定用法for %%i in (set) do (...)
,循环变量格式为%%i
-
【问】如何设置变量的延迟扩展?(
setlocal enabledelayedexpansion
)Note:
-
自定义变量参考上一小节(
set var
/echo %var%
) -
没有延迟变量扩展测试:
@echo off set var1=110 set var1=120&echo %var1% pause --- >temp.bat 110 请按任意键继续. . .
-
延迟变量扩展测试:
setlocal enabledelayedexpansion
@echo off set var1=110 setlocal enabledelayedexpansion set var1=120&echo %var1% pause --- >temp.bat 120 请按任意键继续. . .
-
-
【问】在bat中有哪些文件路径变量可以使用?(以下变量只能在bat文件中使用,不能在cmd中使用)
Note:
-
temp.bat
:::获取当前盘符 echo "%~d0" ::获取当前盘符和路径 echo "%~dp0" :: 获取当前批处理全路径 echo "%~f0" :: 当前盘符和路径的短文件名格式: echo "%~sdp0" :: 当前CMD默认目录: echo "%cd%"
也可以是如下
temp1.bat
:::获取当前盘符 echo %~d0 ::获取当前盘符和路径 echo %~dp0" :: 获取当前批处理全路径 echo %~f0 :: 当前盘符和路径的短文件名格式: echo %~sdp0 :: 当前CMD默认目录: echo %cd% pause
在
cmd
上执行bat文件,控制台输出如下:D:\programSoftware\ffmpeg\ffmpeg-4.4.1-essentials_build>echo "D:" "D:" D:\programSoftware\ffmpeg\ffmpeg-4.4.1-essentials_build>echo "D:\programSoftware\ffmpeg\ffmpeg-4.4.1-essentials_build\" "D:\programSoftware\ffmpeg\ffmpeg-4.4.1-essentials_build\" D:\programSoftware\ffmpeg\ffmpeg-4.4.1-essentials_build>echo "D:\programSoftware\ffmpeg\ffmpeg-4.4.1-essentials_build\test.bat" "D:\programSoftware\ffmpeg\ffmpeg-4.4.1-essentials_build\test.bat" D:\programSoftware\ffmpeg\ffmpeg-4.4.1-essentials_build>echo "D:\PROGRA~1\ffmpeg\FFMPEG~1.1-E\" "D:\PROGRA~1\ffmpeg\FFMPEG~1.1-E\" D:\programSoftware\ffmpeg\ffmpeg-4.4.1-essentials_build>echo D:\programSoftware\ffmpeg\ffmpeg-4.4.1-essentials_build D:\programSoftware\ffmpeg\ffmpeg-4.4.1-essentials_build D:\programSoftware\ffmpeg\ffmpeg-4.4.1-essentials_build>pause 请按任意键继续. . .
-
三、bat
常见字符(含运算符)
标识符 | 含义 |
---|---|
+ | 命令文件连接符 |
*, ? | 文件通配符 |
“” | 字符串界定符 |
^ | 转义符,其后面的特殊字符按原样输出 |
| | 命令管道符 |
>> | 文件重定向符 |
@ | 命令行回显屏蔽符 |
/ | 参数开关引导符 |
: | 批处理标签引导符 |
% | 批处理变量引导符 |
-
组合命令:
&
用法: 第一条命令 & 第二条命令 [& 第三条命令…]
同时执行多条命令,而不管命令是否执行成功。 -
逻辑与:
&&
用法: 第一条命令 && 第二条命令 [&& 第三条命令…]
同时执行多条命令,当碰到执行出错的命令将不执行后面的命令,如果一直没有出错则一直执行完所以命令。 -
逻辑或:
||
用法: 第一条命令 || 第二条命令 [|| 第三条命令…]
同时执行多条命令,当碰到执行正确的命令将不执行后面的命令,如果一直没有出现正确执行的命令则一直执行完所以命令。 -
管道命令:
|
用法: 第一条命令 | 第二条命令 [| 第三条命令…]
将第一条命令的结果作为第二条命令的参数来使用 -
输出重定向命令:
> , >>
将一条命令或某个程序输出结果重定向到特定文件中。> 与 >> 的区别在于:
>
会清除原有文件中的内容后写入指定文件,
>>
只会追加内容到指定文件中,而不会改变其中的内容。 -
<
,>&
,<&
-
<
:从文件中而不是键盘中读入命令输入。 -
>&
:将一个句柄的输出写入到另一个句柄的输入中。 -
<&
:从一个句柄读入输入并将其写入到另一个句柄输出中。
-
-
set [[/a [expression]] [/p [variable=]] string]
-
(,) 分组
-
+,-,*,/,% 算法
-
<<, >> 逻辑移位
-
&, |, ^ 位运算
四、cmd
文件夹管理
-
【问】如何删除文件夹及其子文件夹?(
rd /s 文件夹名称
,remove dir的简写),参考命令提示符——CMD目录操作Note:
rd[盘符:][路径][子目录名][/s][/q][/?]或rmdir[盘符:][路径][子目录名][/s][/q][/?]
,参数说明如下:-
/s
:删除指定目录和所有子目录及其包含的所有文件 -
/q
:安静模式。删除目录时,不会提示确认信息 -
/?
:显示该命令的帮助信息
-
-
【问】如何以图形显示驱动器或路径的文件夹结构(
tree /F 或 /A
),参考windows上如何使用tree生成目录树Note:
tree [drive:][path] [/F] [/A]
-
/F
:显示每个文件夹中文件的名称。 -
/A
:使用 ASCII 字符,而不使用扩展字符。
-
-
【问】如何查看用户已配置的环境变量?(
path
),参考cmd中path命令的使用方法Note:
-
path
:查看所有默认可执行文件配置的路径 -
path 路径
:将当前路径赋值给path
变量,并再次通过path
命令查看 -
path :
:取消所有路径(打开新的cmd
窗口,通过path
可以重写查看默认配置的path
环境变量)
-
-
【问】如何复制文件到指定文件夹?(
copy
),参考cmd 命令 copy 复制文件Note:
-
copy a.txt D:\test
:复制a.txt
文件到D:\test
目录下(注意是\
表示路径,不能复制文件夹) -
copy d:\test\test.txt d:\1.txt
:在复制文件时,把test.txt
改为1.txt
。
-
五、cmd
文件管理
六、cmd
网络命令
七、cmd
系统管理
八、脚本案例
-
配置
jdk
环境变量:@echo off :: TODO:设置java环境变量 color 02 ::设置java的安装路径 set input= set /p "input=请输入java的jdk路径(或回车默认路径为C:\Program Files\Java\jdk1.8.0_171):" if defined input (echo jdk已设置) else (set input=C:\Program Files\Java\jdk1.8.0_171) echo jdk路径为%input% set javaPath=%input% ::先删除JAVA_HOME wmic ENVIRONMENT where "name='JAVA_HOME'" delete ::先删除ClASS_PATH wmic ENVIRONMENT where "name='CLASSPATH'" delete ::创建JAVA_HOME并设值 wmic ENVIRONMENT create name="JAVA_HOME",username="<system>",VariableValue="%javaPath%" ::创建CLASS_PATH并设值 wmic ENVIRONMENT create name="CLASSPATH",username="<system>",VariableValue=".;%%JAVA_HOME%%\lib\tools.jar;%%JAVA_HOME%%\lib\dt.jar;" ::设置path wmic ENVIRONMENT where "name='Path' and username='<system>'" set VariableValue="%Path%;%%JAVA_HOME%%\jre\bin;%%JAVA_HOME%%\bin" pause
直接拿来用就行,注意要用管理员身份打开控制台,否则无法删除环境变量。最后通过
java -version
检测jdk
环境变量是否配置成功。 -
配置
ffmpeg
环境变量:@echo off :: TODO:设置ffmpeg环境变量 color 02 ::获取当前目录下的ffmpeg安装路径 set ffmpeg_path=%~dp0 ::echo %CD% echo %ffmpeg_path% ::设置path wmic ENVIRONMENT where "name='Path' and username='<system>'" set VariableValue="%Path%;%ffmpeg_path%bin" pause