我想在Windows CMD控制台中运行两个命令。
Linux我会这样做
touch thisfile ; ls -lstrh
在Windows上是如何实现的?
自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
c:\dir & vim myFile.txt
引用留档:
使用多个命令和条件处理符号 可以使用条件处理符号从单个命令行或脚本运行多个命令。使用条件处理符号运行多个命令时,条件处理符号右侧的命令会根据条件处理符号左侧的命令的结果执行操作。 例如,您可能希望仅在前一个命令失败时运行命令。或者,您可能希望仅在前一个命令成功时运行命令。 您可以使用下表中列出的特殊字符来传递多个命令。 & [...]command1 & command2用于在一个命令行上分隔多个命令。Cmd.exe运行第一个命令,然后运行第二个命令。&& [...]command1 && command2仅当符号前面的命令成功时,用于运行&&后面的命令。Cmd.exe运行第一个命令,然后仅当第一个命令成功完成时才运行第二个命令。|| [...]command1 || command2用于仅当||前面的命令失败时运行||后面的命令。Cmd.exe运行第一个命令,然后仅当第一个命令未成功完成时运行第二个命令(接收到大于零的错误代码)。( ) [...](command1 & command2)用于分组或嵌套多个命令。; or ,command1 parameter1;parameter2用于分隔命令参数。
使用多个命令和条件处理符号
可以使用条件处理符号从单个命令行或脚本运行多个命令。使用条件处理符号运行多个命令时,条件处理符号右侧的命令会根据条件处理符号左侧的命令的结果执行操作。
例如,您可能希望仅在前一个命令失败时运行命令。或者,您可能希望仅在前一个命令成功时运行命令。
您可以使用下表中列出的特殊字符来传递多个命令。
& [...]command1 & command2用于在一个命令行上分隔多个命令。Cmd.exe运行第一个命令,然后运行第二个命令。
& [...]
command1 & command2
&& [...]command1 && command2仅当符号前面的命令成功时,用于运行&&后面的命令。Cmd.exe运行第一个命令,然后仅当第一个命令成功完成时才运行第二个命令。
&& [...]
command1 && command2
|| [...]command1 || command2用于仅当||前面的命令失败时运行||后面的命令。Cmd.exe运行第一个命令,然后仅当第一个命令未成功完成时运行第二个命令(接收到大于零的错误代码)。
|| [...]
command1 || command2
( ) [...](command1 & command2)用于分组或嵌套多个命令。
( ) [...]
(command1 & command2)
; or ,command1 parameter1;parameter2用于分隔命令参数。
; 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文件
Output.txt
所以,我试图从上下文菜单中启用运行RegAsm(寄存器组件)的特定任务。我遇到的问题是结果会在我读取它之前闪烁并消失。所以我尝试管道到Pause,当命令失败时它不起作用(如这里提到的暂停命令不工作在. bat脚本和这里提到的批处理文件命令PAUSE不起作用)。所以我尝试了cmd /k,但这会让窗口打开以获取更多命令(我只想读取结果)。所以我在链中添加了pause,然后是exit,结果如下:
RegAsm
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%。回显的时间是执行第一个命令的时间。
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结合。
start /b
像往常一样开始,没有/b,并在单独的窗口中启动。
/b
在同一行中启动的命令是:
start /b command1 parameters & command2 parameters
无论如何,如果你想解析输出,我不建议使用它。我注意到输出是在命令的输出之间打乱的。
好吧,你有两个选择:管道,或者只是&:
DIR /S & START FILE.TXT
或者,
tasklist | find "notepad.exe"
管道(|)更多的是获取一个命令的输出,并将其放入另一个命令中。(&)只是说运行这个和那个。
|
再举一个例子:例如,当我们使用gulp构建系统时,而不是
gulp
gulp-默认>构建
gulp build-构建构建文件夹
gulp build
gulp watch-启动文件监视
gulp watch
gulp dist-构建dist文件夹
gulp 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%,可能会导致很多无法处理的麻烦
%PATH%
%USERPROFILE%
是的,有。它是&。
&&将在命令1完成时执行命令2,前提是它没有失败。
&将无论如何执行。
在Windows中使用&符号在一行中使用命令
C:\Users\Arshdeep Singh>cd Desktop\PROJECTS\PYTHON\programiz & jupyter notebook
在linux中我们使用
在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文件,以便在一行中执行多个命令行:
doskey
$T
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"
这是结果:
这可能会帮助别人:)