这个批处理文件中的"&&"是什么意思?

62

我收到了一个回答我的问题的人发来的一行代码,但是我有点困惑:这个批处理文件中的"&&"是什么意思?

@echo off
set /p Quest="How are you today? "
echo %Quest% > Results.txt
findstr /r /i "not.*good not.*well" Results.txt >nul && echo Sorry && goto pause
findstr /i "good well" Results.txt >nul && echo My day is doing good as well
:pause
pause

2
哇,http://www.robvanderwoude.com/condexec.php - Mathemats
@Mathemats 感谢您为我提供网站链接,它包含了我需要的所有内容。 - Kit
这绝对是一个不错的起始网站,但请注意其中很大一部分已经过时或废弃 - 例如debug页面上的所有内容。 - SomethingDark
@SomethingDark 好的,我会在学习中记住这点。 - Kit
该页面上的“相当于”列在使用输出重定向时不等效,请参见此帖子:https://dev59.com/umkv5IYBdhLWcg3wxjvQ#10358437。 - CrouZ
2个回答

167
  • & 用于在一行中分隔命令。

  • && 只有前一个命令的错误级别为0时,才执行此命令。

  • || (未在上面使用) 只有前一个命令的错误级别不为0时,才执行此命令。

  • > 输出到文件。

  • >> 追加输出到文件。

  • < 从文件输入。

  • | 将一个命令的输出作为另一个命令的输入。

  • ^ 转义上述任何内容(如果需要将其传递给程序,包括它本身)。

  • " 必须用引号括起来的带空格的参数。

  • +copy 一起使用以连接文件。例如:copy file1+file2 newfile

  • ,copy 一起使用以指示缺少的参数。这会更新文件修改日期。例如:copy /b file1,,

  • %variablename% 内置或用户设置的环境变量。

  • !variablename! 执行时展开的用户设置的环境变量,使用 SetLocal EnableDelayedExpansion 命令启用。

  • %<number> (%1) 传递给批处理文件的第n个命令行参数。 %0 是批处理文件的名称。

  • %* (%*) 整个命令行。

  • %<a letter>%%<a letter>%A%%A)在for循环中表示变量。在命令提示符下使用单个%符号,在批处理文件中使用两个%符号。


  • +1,将所有内容放在一个地方非常好。我不理解逗号的描述。copy /b file1,, 返回“无法将文件复制到自身。”我是从命令行运行的。如果从批处理文件中运行它,会有不同的结果吗? - riderBill
    14
    它来自哪里? - Deilan
    1
    一个关于&符号的澄清:“用于将多个命令分隔在一个命令行上。Cmd.exe运行第一个命令,然后运行第二个命令。”所以我明白,用&分隔的命令会像使用&&一样按顺序运行,但它们始终会运行(不管前一个命令的错误级别如何)。 - Dawid Ohia
    7
    很棒的信息,但来源是什么? - cowlinator

    80

    &&表示当第一个命令成功返回(即errorlevel == 0)时,在同一行上运行第二个命令。与之相反的是||,它表示当第一个命令不成功时(即errorlevel != 0),运行第二个命令。


    5
    这是一个关于Win XP的参考页面(哈哈),但仍包含有用的信息。http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds_shelloverview.mspx?mfr=true - user4317867
    2
    @user4317867,链接已经失效。 - Spandyie
    7
    @Spandy:https://web.archive.org/web/20060412075633/https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds_shelloverview.mspx?mfr=true - Parsa
    2
    所有这些内容都在ss64.com上。https://ss64.com/nt/syntax-conditional.html和https://ss64.com/nt/syntax-redirection.html - JGFMK
    2
    小心单个&,它确实有效,但不检查前一个命令是否成功。 - js2010

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接