欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > windows命令行与批处理

windows命令行与批处理

2025/2/22 2:10:51 来源:https://blog.csdn.net/m0_62503332/article/details/144612730  浏览:    关键词:windows命令行与批处理

启动

win + r,输入 cmd 或 cmd.exe,然后按回车,默认进入当前用户路径下的cmd

在文件路径栏里输入cmd,可以直接跳到当前路径下的cmd

命令

说明

  • 不区分大小写

  • cmd中运行可执行文件(exe txt md等),可以不加后缀

  • 通过向上键和向下键来浏览之前运行过的命令

  • Tab键可以自动补全(支持文件或文件名自动补全)

  • 使用/?可以查看命令用法,例如:dir /?

  • 命令基本格式命令 参数列表 ,命令用法中的[]代表可选

  • ctrl + c:强行中止

windows 路径分隔符:\

Linux 路径分隔符:/

当前目录:.

上一级目录:..

常用命令

命令功能
dir显示文件夹中的文件dir /a
tree显示文件夹树形结构tree /f
盘符:进入指定磁盘c: d:
cd切换目录cd test cd ..
mkdir 或md创建目录mkdir test
rmdir 或 rd删除目录rmdir test
del删除文件del 1.txt del /q/a/f *.txt
rename 或 ren重命名rename a.txt b.txt
copy复制文件到某个路径下copy a\1.txt b\1.txt
copy 1.txt a
路径默认前缀为当前路径(即cmd显示的路径)
复制的同时可以重命名和指定目标路径
move移动文件并重命名move 1.txt a\1.txt
命令功能
echo显示echo hello world
pause暂停请按任意键继续. . .
cls清屏
exit退出
type显示文件内容type test.txt
find查找文件中的字符串find “abc” test.txt
fc逐行比较文件内容fc 1.txt 2.txt
date显示/修改日期
time显示/修改时间
ping网络连接测试ping www.baidu.com
ipconfig显示网络配置信息
shutdown关机shutdown /s /t 60(60s 后关机)
shutdown /a(取消关机)

多命令

&从左至右执行命令,不管命令是否执行失败
abc & dir
&&从左至右执行命令,前面的命令执行失败则不执行后面的命令
abc && dir
||从左至右执行命令,碰到执行正确的命令后将不执行后面的命令
abc || dir || bcd

重定向操作符

与Unix/Linux 一样,DOS使用三个通用的“文件流”来进行输入,输出文本信息或者错误信息。

程序或者脚本使用

标准输入文件(stdin)读取内容,

标准输出(stdout)输出文件或者打印文本到屏幕上,

标准错误(stderr)输出错误信息到屏幕上。

>将左边 命令/程序 结果输入到右边文件中

例:

echo hello > tmp.txt

会覆盖文件中原有内容

>>将左边 命令/程序 结果追加输入到右边文件中

例:

echo hello > tmp.txt

echo world > tmp.txt

不会覆盖文件中原有内容

另起一行追加

默认情况下,>>> 是将标准输出重定向。 也可以在操作符前加上 2 (注意没有空格) 来重定向标准错误。

2>若左边 命令/程序 执行失败,则将其中失败结果输入到右边文件中
若左边 命令/程序 执行成功,则不将结果输入到右边文件中
2>>追加
1>&2看不懂,妈的
2>&1看不懂,妈的

test.cmd

@echo off
echo hello
somecommond
pause

test.cmd > tmp.txt

将 test.cmd 程序执行后的成功结果输入到 tmp.txt

test.cmd 2> tmp.txt

将 test.cmd 程序执行后的失败结果输入到 tmp.txt

<将右边文件的内容作为左边命令的输入

例:

sort < tmp.txt

tmp.txt

3
2
4
1

管道符

|将左边命令的输出作为右边命令的输入

dir | sort

dir | find "txt"

其他

NUL 是一个虚拟的设备(文件),将 stdout 重定向到 NUL ,则会丢弃标准输出。

pause > nul

dir > nul

批处理

在Windows操作系统中,批处理指的是批处理文件(Batch File),这是一种包含一系列命令的脚本文件,这些命令可以自动执行,无需用户逐个输入。批处理文件通常用于自动化常规的、重复性的任务,比如文件操作、程序执行、系统配置等。

扩展名与文件命名

扩展名

.bat 是最常用的扩展名,用于传统的批处理文件。

.cmd 是较新的扩展名,用于Windows NT命令脚本,它提供了一些额外的功能和改进。

两者都可以被Windows命令解释器(cmd.exe)执行,

但在某些情况下,.cmd 脚本可能提供更好的性能和额外的命

不过,在日常使用中,.bat 和 .cmd 文件之间的差异对大多数用户来说是不明显的。

在cmd命令行中编写命令和在批处理文件中编写命令会有些语法上的不同,后面会提到

文件命名

1-文件名中避免使用空格,使用 Pascal 命名法则来命名

例如: HelloWorld.cmd 代替 Hello World.cmd

2-可以使用标点符号,比如 . 或者 -

例如: Hello.World.cmd, Hello-world.cmd, Hello_World.cmd

3-避免与系统内置的命令或者一些常用的软件相同。

例如,避免使用 ping.cmd,因为系统中有个 ping.exe的可执行文件。如果运行ping命令,你想要运行的是 ping.cmd, 但可能调用的是 ping.exe

运行方式

  • 双击运行
  • 在cmd中运行(可以传参)

基本结构

批处理文件的编写非常简单,下面是一个简单的例子:

@echo off
echo Hello, this is a batch file.
pause
  • @echo off:关闭命令回显,即不显示执行的命令。

批处理文件中的第一个非注释行,通常是一条关闭输出的命令。

@ECHO OFF

@ 是一个特殊的操作符,用于抑制命令行的打印。

一旦我们关闭了输出,在后续的脚本命令中就不再需要 @ 操作符了。

可以使用以下命令恢复打印:

ECHO ON

当脚本退出时,命令提示符会自动将ECHO恢复到它以前的状态。

  • echo Hello, this is a batch file.:在命令提示符下显示文本。
  • pause:暂停执行,等待用户按任意键继续。

这个结构不是固定的

没有pause,直接双击运行bat,窗口会一闪而过

没有@echo off,每运行一条脚本中的命令,都会显示cmd的路径,即>前的路径

通常在cmd中运行脚本时,我喜欢把 pause 去掉

注释

::this is a line of comment
rem this is a line of comment

大多数的高级开发者发现, :: 相比 REM 能减少注意力分散,但是在有些地方 :: 会导致错误。

比如,一个 for 循环中使用 :: 就会导致错误。

如果出现这种情况,只需要换回 REM 即可。

变量

赋值

使用 SET 命令为一个变量赋值

SET foo=bar

注意

不要在名称和值之间使用空格

错误写法: SET foo = bar

正确写法: SET foo=bar

1set var=studentvar=student
2set var= studentvar= student
3set var = studentvar = student

注意空格!

1和2 变量名一样,值不一样

2和3 变量名不一样,值不一样

所以还是写成:

set var=student

可通过set命令验证

自定义变量名一般是小写

系统变量一般是大写

使用

在大多数情况下,可以通过 % 运算符将变量名括起来读取变量值。

SET var=123
ECHO %var%

扩展

/A 支持算数操作

set /a var=2+3*2
echo %var%

输出结果:8

试比较

set var=2+3*2
echo %var%

输出结果:2+3*2

注意

通过set命令在CMD会话中设置的环境变量只会在当前会话中有效,关闭CMD窗口后这些变量就会消失。而通过系统属性或控制面板设置的环境变量是持久的,会影响到所有新的进程和用户会话。

SET 会覆盖任何现有变量

在使用前,先验证下是否会覆盖系统变量

ECHO %foo% 可以确认 foo 是不是一个现有的变量。

如果 cmd 输出结果为 %foo%,说明不是一个现有变量,可以放心使用

使用 set 可以查看当前定义好的变量(set temp)

不过有些变量已定义却不会显示

例如:

%CD% - 当前目录字符串。

%DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。

%TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。

%RANDOM% - 0 和 32767 之间的任意十进制数字。

%ERRORLEVEL% - 当前 ERRORLEVEL 数值。

%CMDEXTVERSION% - 当前命令处理器扩展版本号。

%CMDCMDLINE% - 调用命令处理器的原始命令行。

%HIGHESTNUMANODENUMBER% - 此计算机上的最高 NUMA 节点号。

%0%1%2…… - 命令行参数。%0表示命令名,在cmd运行该bat时,bat文件名即为%0,之后即%1 %2 … 即代表之后输入的参数,参数间按空格分开

命令行中输入 echo %cd% 查看当前目录字符串

返回值

变量 %ERRORLEVEL% 存储了上一次命令运行后返回的代码

通常情况下,命令行程序执行成功会返回 0 ,执行错误会返回非0的数字

条件

if [not] 条件 (语句块
) else (语句块
)

请注意小括号和各个空格的位置

也可以写在一行

例1:

@echo off
set var=a
if a == b (echo true) else (echo false)
if a == %var% (
echo true
) else (
echo false
)
pause

例2(扩展):

@echo off
if exist demo1.bat (echo true) else (echo false)
if /i abc == ABC (echo true) else (echo false)
if /i B gtr a (echo true) else (echo false)
pause
/i比较
忽略大小写
equ等于
neq不等于
lss小于
leq小于等于
gtr大于
geq大于等于

请注意,if语句在批处理文件中使用单个百分号(%),而在命令提示符直接使用时,需要使用双百分号(%%)来表示变量。

跳转

goto labelName		# 跳转到标签所在行
:label			# 标签以冒号开头

例:

@echo off
goto l1
echo hello
:l1
echo world
pause

还有一个 call 语句,作用和 goto 有点类似

主要区别:

  • 跳转与返回goto是单向的跳转,不会返回;而call是双向的,执行完毕后会返回。
  • 跨文件能力call可以调用其他文件,而goto只能在当前文件内跳转。
  • 参数传递call可以传递参数给被调用的程序或标签,goto则不能

循环

for %%i in (set) do (语句块
)

循环变量用 %% 指定,只能是单字母,区分大小写

set 表示文件集合(也可以是空文件),元素之间以逗号或空格分隔,支持通配符

?	# 单个字符
*	# 任意字符

例:

@echo off
echo --for example 1--
for %%i in (a,b,c) do (echo %%i)
echo --for example 2--
for %%i in (*.*) do (echo %%i)
pause

example 1:

逐个打印 a b c

example 2:

打印当前目录下所有后缀的所有文件

写成如下形式亦可

for %%i in (*) do (echo %%i)

例:

@echo off
echo --for example 3--
for %%i in (*.bat) do (echo bat file: %%i
)
echo --for example 4--
for /d %%i in (*) do (echo %%i
)
echo --for example 5--
for %%i in (C:\Users\feini\Desktop\202412_cmd\*) do (echo %%i
)
echo --for example 6--
for /r C:\Users\feini\Desktop\202412_cmd /d %%i in (*) do (echo %%i
)
pause

example 3:

遍历当前目录下的所有后缀为bat的文件

example 4:

遍历当前目录下的所有文件夹

example 5:

遍历指定目录下的所有文件

example 6

递归遍历指定目录及其子目录下的所有文件夹

例:

@echo off
for /l %%i in (1, 3, 11) do (echo Number: %%i
)
pause

从1开始输出,每次递增3,直到11

在cmd中输入以下语句是错误的

for %%i in (a,b,c) do (echo %%i)

请注意,在命令行中使用 for 循环时,变量使用单个百分号 % 而不是批处理文件中的双百分号 %%。这是因为在命令行中,单个百分号用于表示单个命令的变量,而在批处理文件中,双百分号用于表示整个批处理文件中的变量。

可以在cmd中输入for /? 查看说明

进阶

环境变量

环境变量PATH定义了操作系统在执行命令时搜索可执行文件的目录。当用户在CMD中输入一个命令时,系统会按照PATH环境变量中列出的目录顺序去查找对应的可执行文件。

setlocal

在Windows命令提示符(cmd)和批处理文件中,setlocal是一个命令,用于开始一个新的本地环境块。在setlocal命令之后的命令会在这个局部环境中执行,这意味着在这个块中所做的任何环境变量的更改都不会影响全局环境。

功能

  • 环境变量限制:在setlocal和对应的endlocal之间设置的环境变量或所做的更改,仅在这两个命令之间的脚本部分有效。
  • 错误处理:如果在setlocalendlocal之间发生错误,endlocal会尝试恢复环境到setlocal执行前的状态。
  • 子进程隔离:在setlocalendlocal之间启动的任何子进程(如调用的其他批处理文件或程序)不会继承这些局部环境变量。

语法

cmd

setlocal [选项]
  • 选项

    • /a:设置或清除变量时不区分大小写。
    • -enableDelayedExpansion:启用延迟变量扩展。
    • -disableDelayedExpansion:禁用延迟变量扩展。
    • -enableExtensions:启用命令扩展。
    • -disableExtensions:禁用命令扩展。

示例

cmd

@echo off
setlocal
set myVar=This is a local variable
echo %myVar%
endlocal
echo %myVar%  ; 这将显示 nothing,因为 myVar 只在 setlocal 和 endlocal 之间有效

在这个例子中,myVar环境变量只在setlocalendlocal之间的局部环境中有效。一旦执行到endlocalmyVar就不再存在于环境变量中。

用途

  • 临时更改环境:当你需要临时更改环境变量,而不影响全局环境时。
  • 编写脚本:在编写批处理脚本时,使用setlocalendlocal可以帮助管理环境变量,避免脚本间的干扰。
  • 调试和测试:在调试和测试时,可以局部地更改环境变量,以便测试不同的配置,而不会影响系统的全局设置。

setlocal是一个强大的工具,可以帮助你控制批处理脚本中的环境变量,使脚本更加灵活和安全。

延迟变量

@echo off
set num=1
for %%i in (1 2 3) do (set /a num=num+1echo %num%
)
echo %num%
pause
@echo off
setlocal enabledelayedexpansionset num=0
for %%i in (1 2 3) do (set /a num=num+1echo !num!
)
echo %num%endlocalpause

注意,随着endlocal语句位置的变化,num的值也会发生变化

批量修改文件名

@echo off
setlocal enabledelayedexpansionset cnt=1for %%f in (*.txt) do (rename %%f !cnt!.txtset /a cnt=!cnt! + 1
)
endlocalpause

https://blog.csdn.net/hfy1237/article/details/130123285

https://blog.51cto.com/u_15170706/6308452

https://blog.csdn.net/Dandelion_gong/article/details/78067501

命令全称

CMD中的命令通常有缩写形式和全称形式,以下是一些常用命令及其全称:

  1. dir - directory:列出目录内容。
  2. cd - change directory:改变当前目录。
  3. mkdirmd - make directory:创建新目录。
  4. rmdirrd - remove directory:删除目录。
  5. deldelete - delete file:删除文件。
  6. renrename - rename file:重命名文件。
  7. cls - clear screen:清除屏幕。
  8. ipconfig - IP configuration:显示TCP/IP配置信息。
  9. ping - packet internet groper:发送ICMP ECHO_REQUEST到网络主机。
  10. netstat - network statistics:显示网络连接、路由表、接口统计等。
  11. systeminfo - system information:显示本地或远程主机的详细配置信息。
  12. tasklist - list tasks:显示运行中的进程列表。
  13. taskkill - kill task:结束或杀掉一个进程。
  14. shutdown - shutdown system:关闭或重启计算机。

请注意,有些命令可能没有官方的全称,因为它们本身就是缩写,或者是为了简便而设计的。在实际使用中,用户通常使用缩写形式,因为它们更短、更快捷。

参考资料

https://www.jianshu.com/p/dbb7b13c5ed8

https://www.bilibili.com/video/BV12T411Z716

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词