ZetCode

Windows 命令提示符 链式命令

最后修改于 2025 年 7 月 14 日

Windows 命令提示符中的链式命令允许按顺序或有条件地执行多个命令。它们无需编写单独的脚本即可实现复杂的操作。命令链使用特殊运算符来控制命令执行流程。此技术对于高效的命令行工作至关重要。

命令链运算符包括 &、&&、|| 和 |。每个运算符在组合命令时都有不同的目的。理解这些运算符可以大大提高命令行生产力。它们既可以在交互式会话中使用,也可以在批处理文件中使用。

链式命令减少了对临时文件和中间步骤的需求。它们允许直接对命令输出进行过滤、处理和操作。掌握命令链是 Windows 系统管理员的关键技能。本教程通过示例涵盖了所有主要的命令链技术。

基本定义

命令链运算符控制多个命令的执行方式

这些运算符可以组合起来创建复杂的命令序列。它们在交互式 cmd 会话和批处理文件中都有效。

使用 & 进行顺序执行

`&` 运算符顺序运行多个命令。所有命令都会执行,无论前一个命令成功还是失败。

sequential.bat
@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)时运行。

conditional.bat
@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 被跳过。

使用 || 进行错误处理

`||` 运算符仅在前一个命令失败时执行第二个命令。这对于错误处理和回退操作很有用。

doping.bat
ping example.com -n 1 >nul || echo Unable to reach server!

此脚本尝试 ping 服务器。如果 ping 失败,它会显示一条错误消息。

使用 | 进行命令管道传输

`|` 运算符将一个命令的输出管道传输到另一个命令。这使得强大的命令组合和输出处理成为可能。

piping.bat
@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 地址,并保存到文件。将管道传输与输出重定向结合使用。

组合运算符

链式运算符可以组合以实现复杂的逻辑。此示例显示了 `&`、`&&`、|| 和 | 的混合使用。

combined.bat
@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 命令提示符链式命令。掌握这些技术可以实现强大的命令行自动化和脚本编写。

作者

我叫 Jan Bodnar,是一名热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。