Windows 命令提示符 链式命令
最后修改于 2025 年 7 月 14 日
Windows 命令提示符中的链式命令允许按顺序或有条件地执行多个命令。它们无需编写单独的脚本即可实现复杂的操作。命令链使用特殊运算符来控制命令执行流程。此技术对于高效的命令行工作至关重要。
命令链运算符包括 &、&&、|| 和 |。每个运算符在组合命令时都有不同的目的。理解这些运算符可以大大提高命令行生产力。它们既可以在交互式会话中使用,也可以在批处理文件中使用。
链式命令减少了对临时文件和中间步骤的需求。它们允许直接对命令输出进行过滤、处理和操作。掌握命令链是 Windows 系统管理员的关键技能。本教程通过示例涵盖了所有主要的命令链技术。
基本定义
命令链运算符控制多个命令的执行方式
- & - 顺序运行命令,无论前一个命令是否成功。
- && - 仅当前一个命令成功(errorlevel 为 0)时运行下一个命令。
- || - 仅当前一个命令失败(errorlevel > 0)时运行下一个命令。
- | - 将第一个命令的输出作为第二个命令的输入进行管道传输。
这些运算符可以组合起来创建复杂的命令序列。它们在交互式 cmd 会话和批处理文件中都有效。
使用 & 进行顺序执行
`&` 运算符顺序运行多个命令。所有命令都会执行,无论前一个命令成功还是失败。
@echo off echo First command & echo Second command & echo Third command
此示例演示了简单的顺序执行。所有三个 echo 命令将一个接一个地运行。
echo First command & echo Second command & echo Third command
`&` 运算符连接了三个 echo 命令。每个命令在前一个命令完成后运行,无论成功与否。
C:\Users\Jano>sequential.bat First command Second command Third command
输出显示所有命令都按顺序执行。当您需要一起运行多个独立命令时,这非常有用。
使用 && 进行条件执行
`&&` 运算符提供条件执行。第二个命令仅在前一个命令成功(返回 errorlevel 0)时运行。
@echo off dir C:\Windows\System32\cmd.exe && echo CMD found successfully dir C:\Windows\System32\nonexistent.txt && echo This won't display
此脚本显示了成功和失败的条件执行。第二个 echo 命令仅在 dir 命令找到文件时运行。
dir C:\Windows\System32\cmd.exe && echo CMD found successfully
由于 cmd.exe 存在,dir 命令成功,echo 命令执行。这对于成功通知很有用。
dir C:\Windows\System32\nonexistent.txt && echo This won't display
dir 命令未能找到 nonexistent.txt,因此 echo 命令不运行。`&&` 可防止在失败时继续执行。
C:\Users\Jano>conditional.bat Volume in drive C is Windows Volume Serial Number is 4415-13BB Directory of C:\Windows\System32 09. 07. 2025 10:30 376 832 cmd.exe 1 File(s) 376 832 bytes 0 Dir(s) 10 326 323 200 bytes free CMD found successfully Volume in drive C is Windows Volume Serial Number is 4415-13BB Directory of C:\Windows\System32 File Not Found
输出显示仅在 `&&` 之后成功执行的命令。由于 dir 命令失败,第二个 echo 被跳过。
使用 || 进行错误处理
`||` 运算符仅在前一个命令失败时执行第二个命令。这对于错误处理和回退操作很有用。
ping example.com -n 1 >nul || echo Unable to reach server!
此脚本尝试 ping 服务器。如果 ping 失败,它会显示一条错误消息。
使用 | 进行命令管道传输
`|` 运算符将一个命令的输出管道传输到另一个命令。这使得强大的命令组合和输出处理成为可能。
@echo off echo Getting system info... systeminfo | findstr /i "OS Name" echo Checking if Chrome is running... tasklist | findstr /i "chrome" || echo Chrome not running. echo Saving network info to file... ipconfig | findstr /i "IPv4" > network_info.txt type network_info.txt
此脚本展示了命令管道的实际用途。`|` 运算符连接命令,其中第一个命令的输出成为第二个命令的输入。
systeminfo | findstr /i "OS Name"
将系统信息输出管道传输到 findstr,仅过滤 OS 名称行。这可以从详细输出中提取特定信息。
tasklist | findstr /i "chrome"
列出所有正在运行的进程并过滤 Chrome 实例。用于检查特定应用程序是否正在运行。
ipconfig | findstr /i "IPv4" > network_info.txt
获取网络配置,过滤 IPv4 地址,并保存到文件。将管道传输与输出重定向结合使用。
组合运算符
链式运算符可以组合以实现复杂的逻辑。此示例显示了 `&`、`&&`、|| 和 | 的混合使用。
@echo off echo Starting system checks... echo ---------------------------- :: Get OS Name for /f "tokens=2 delims=:" %%A in ('systeminfo ^| findstr /i "OS Name"') do ( echo OS Name:%%A ) :: Check if kernel32.dll exists if exist C:\Windows\System32\kernel32.dll ( echo Found kernel32.dll :: Get DLL version using PowerShell for /f "delims=" %%V in ('powershell -command "(Get-Item 'C:\Windows\System32\kernel32.dll').VersionInfo.FileVersion"') do ( echo kernel32.dll Version: %%V ) ) else ( echo DLL not found )
此脚本演示了高级命令链。它结合了多个运算符来进行条件执行和错误处理。
:: Get OS Name for /f "tokens=2 delims=:" %%A in ('systeminfo ^| findstr /i "OS Name"') do ( echo OS Name:%%A )
使用 for 循环从 systeminfo 输出中提取 OS 名称。管道 ( | ) 运算符使用 findstr 过滤输出,for 循环处理它。
:: Check if kernel32.dll exists if exist C:\Windows\System32\kernel32.dll ( echo Found kernel32.dll :: Get DLL version using PowerShell for /f "delims=" %%V in ('powershell -command "(Get-Item 'C:\Windows\System32\kernel32.dll').VersionInfo.FileVersion"') do ( echo kernel32.dll Version: %%V ) ) else ( echo DLL not found )
检查 kernel32.dll 是否存在。如果存在,则使用 PowerShell 获取其版本。if exist 命令有条件地执行 PowerShell 命令以获取 DLL 版本。
来源
本教程介绍了 Windows 命令提示符链式命令。掌握这些技术可以实现强大的命令行自动化和脚本编写。