如何在Windows CMD中的一行中运行两个命令?

我想在Windows CMD控制台中运行两个命令。

Linux我会这样做

touch thisfile ; ls -lstrh

在Windows上是如何实现的?

1341324 次浏览

自2000年以来在所有Microsoft操作系统上都是这样,今天仍然很好:

dir & echo foo

如果您希望第二个命令仅在第一个成功退出时执行:

dir && echo foo

在一行上执行多个命令的单与号(&)语法可以追溯到Windows XP、Windows 2000和一些早期的NT版本。(至少4.0,根据这里的一位评论者。)

关于这一点,还有很多其他的观点,你会发现向下滚动这个页面。

历史数据如下,对于那些可能觉得它有教育意义的人。

在此之前,&&语法只是shell替换4DOS的一项功能,然后将该功能添加到Microsoft命令解释器中。

在Windows 95、98和ME中,您可以使用管道字符:

dir | echo foo

在MS-DOS 5.0及更高版本中,通过一些早期的Windows和NT版本的命令解释器,(未记录的)命令分隔符是字符20(Ctrl+T),我将在这里用^T表示。

dir ^T echo foo

您可以使用&一个接一个地运行命令。示例:c:\dir & vim myFile.txt

引用留档:

使用多个命令和条件处理符号

可以使用条件处理符号从单个命令行或脚本运行多个命令。使用条件处理符号运行多个命令时,条件处理符号右侧的命令会根据条件处理符号左侧的命令的结果执行操作。

例如,您可能希望仅在前一个命令失败时运行命令。或者,您可能希望仅在前一个命令成功时运行命令。

您可以使用下表中列出的特殊字符来传递多个命令。

  • & [...]
    command1 & command2
    用于在一个命令行上分隔多个命令。Cmd.exe运行第一个命令,然后运行第二个命令。

  • && [...]
    command1 && command2
    仅当符号前面的命令成功时,用于运行&&后面的命令。Cmd.exe运行第一个命令,然后仅当第一个命令成功完成时才运行第二个命令。

  • || [...]
    command1 || command2
    用于仅当||前面的命令失败时运行||后面的命令。Cmd.exe运行第一个命令,然后仅当第一个命令未成功完成时运行第二个命令(接收到大于零的错误代码)。

  • ( ) [...]
    (command1 & command2)
    用于分组或嵌套多个命令。

  • ; or ,
    command1 parameter1;parameter2
    用于分隔命令参数。

&;(运行命令)的Bash等价物,&&&&的Bash等价物(仅当前一个命令未引起错误时运行命令)。

如果要创建cmd快捷方式(例如在桌面上),请添加 /k参数(/k表示保留, /c将关闭窗口):

cmd /k echo hello && cd c:\ && cd Windows

cmd /c ipconfig /all & Output.txt

此命令执行命令并在单个命令中打开Output.txt文件

所以,我试图从上下文菜单中启用运行RegAsm(寄存器组件)的特定任务。我遇到的问题是结果会在我读取它之前闪烁并消失。所以我尝试管道到Pause,当命令失败时它不起作用(如这里提到的暂停命令不工作在. bat脚本和这里提到的批处理文件命令PAUSE不起作用)。所以我尝试了cmd /k,但这会让窗口打开以获取更多命令(我只想读取结果)。所以我在链中添加了pause,然后是exit,结果如下:

cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit

这就像一个魅力——RegAsm在文件上运行并显示其结果,然后显示“按任意键继续…”提示符,然后在按下键时关闭命令提示符窗口。

P. S.对于可能感兴趣的其他人,您可以使用以下. reg文件条目将dllfile关联添加到. dll文件,然后将RegAsm命令扩展名添加到该文件(请注意转义的引号和反斜杠):

[HKEY_CLASSES_ROOT\.dll]"Content Type"="application/x-msdownload"@="dllfile"
[HKEY_CLASSES_ROOT\dllfile]@="Application Extension"
[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm]@="Register Assembly"
[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm\command]@="cmd /k C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\regasm.exe \"%1\" /codebase \"%1\" & pause & exit"

现在我有一个很好的右键单击菜单来注册程序集。

您可以使用打电话来克服过早评估环境变量的问题。

set A=Hello & call echo %A%

否,cd / && tree && echo %time%。回显的时间是执行第一个命令的时间。

管道有一些问题,但只要人们知道它是如何工作的,它就不是关键的。

当在同一行上运行多个命令时,可以使用多个处理符号,并且在某些情况下可能导致处理重定向,在其他情况下更改输出,或者只是失败。一个重要的情况是将操作变量的命令放置在同一行上。

@echo offsetlocal enabledelayedexpansionset count=0set "count=1" & echo %count% !count!
0 1

正如您在上面的示例中看到的,当使用变量的命令放置在同一行时,您必须使用延迟扩展来更新您的变量值。如果您的变量已被索引,请使用带有%%修饰符的CALL命令在同一行更新其值:

set "i=5" & set "arg!i!=MyFile!i!" & call echo path!i!=%temp%\%%arg!i!%%
path5=C:\Users\UserName\AppData\Local\Temp\MyFile5

为了同时执行两个命令,您必须在两个命令之间放置一个&(&)符号。如下所示:

color 0a & start chrome.exe

干杯!

我尝试在同一个窗口中有两个ping,它是同一行的串行命令。完成第一个后,运行第二个命令。

解决方案是在Windows 7命令提示符上与start /b结合。

像往常一样开始,没有/b,并在单独的窗口中启动。

在同一行中启动的命令是:

start /b command1 parameters & command2 parameters

无论如何,如果你想解析输出,我不建议使用它。我注意到输出是在命令的输出之间打乱的。

好吧,你有两个选择:管道,或者只是&

DIR /S & START FILE.TXT

或者,

tasklist | find "notepad.exe"

管道(|)更多的是获取一个命令的输出,并将其放入另一个命令中。(&)只是说运行这个和那个。

再举一个例子:例如,当我们使用gulp构建系统时,而不是

gulp-默认>构建

gulp build-构建构建文件夹

gulp watch-启动文件监视

gulp dist-构建dist文件夹

我们可以用一条线做到这一点:

cd c:\xampp\htdocs\project & gulp & gulp watch

很简单:只需用&&符号区分它们。示例:

echo "Hello World" && echo "GoodBye World".

“再见世界”将在“Hello World”之后打印。

当您尝试在一行中使用或操作变量时,请注意它们的内容!例如

PATH=C:\Program Files (x86)\somewhere;"C:\Company\Cool Tool";%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;

如果你把它用作%PATH%,可能会导致很多无法处理的麻烦

  1. 最后的括号结束你的小组陈述
  2. 双引号不允许您使用%PATH%来处理括号问题
  3. %USERPROFILE%这样的引用变量会包含什么?

是的,有。它是&

&&将在命令1完成时执行命令2,前提是它没有失败。

&将无论如何执行。

在Windows中使用&符号在一行中使用命令

C:\Users\Arshdeep Singh>cd Desktop\PROJECTS\PYTHON\programiz & jupyter notebook

在linux中我们使用

touch thisfile ; ls -lstrh

在Windows 10中,您还可以使用脚本运行器

ScriptRunner.exe -appvscript demoA.cmd arg1 arg2 -appvscriptrunnerparameters -wait -timeout=30 -rollbackonerror -appvscript demoB.ps1 arg3 arg4 -appvscriptrunnerparameters -wait -timeout=30 -rollbackonerror

它允许您在您想要的一行上启动几个命令,您可以连续运行它们或不等待彼此,您可以设置超时和回滚错误。

尝试使用doskey键和$T(相当于&)使用这些行创建一个. bat ot. cmd文件,以便在一行中执行多个命令行:

touch=echo off $T echo. ^> $* $T dir /B $T echo on

它将创建一个空文件。

示例:

touch myfile

在cmd中,你会得到这样的东西:

输入图片描述

但如前所述,建议使用&运算符在CMD提示符的一行中执行多个命令行。

享受=)

在Windows中,我使用了上述所有解决方案&, &&,但没有任何效果最后';'符号为我工作

npm install; npm start

我试图创建批处理文件来启动提升的cmd并使其运行2个单独的命令。当我使用&&&字符时,我遇到了一个问题。例如,这是我的批处理文件中的文本:

powershell.exe -Command "Start-Process cmd \"/k echo hello && call cd C:\ \" -Verb RunAs"

解析错误:解析错误

经过几次猜测,我发现,如果你用像"&&"这样的引号包围&&,它会起作用:

powershell.exe -Command "Start-Process cmd \"/k echo hello "&&" call cd C:\ \" -Verb RunAs"

这是结果:

执行结果

这可能会帮助别人:)