我想在Windows CMD控制台中运行两个命令。
在Linux中我会这样做
touch thisfile ; ls -lstrh
如何在Windows上完成?
答案 0 :(得分:1063)
自2000年以来在所有Microsoft操作系统上都是如此,今天仍然很好:
dir & echo foo
如果您希望第二个命令仅在第一个命令成功退出时执行:
dir && echo foo
在一行上执行多个命令的单个&符号(&)语法可以追溯到Windows XP,Windows 2000和一些早期的NT版本。 (至少4.0,据一位评论者说。)
关于此,还有很多其他要点,您可以在此页面上向下滚动。
历史数据如下,对于那些可能认为具有教育意义的人来说。
在此之前,&&在将该功能添加到Microsoft命令解释程序之前,语法只是shell替换4DOS的一项功能。
在Windows 95,98和ME中,您将改为使用竖线字符:
dir | echo foo
在MS-DOS 5.0及更高版本中,通过一些早期的Windows和NT版本的命令解释器,(未记录的)命令分隔符是字符20(Ctrl + T),我将在这里用^ T表示。
dir ^T echo foo
答案 1 :(得分:530)
文件引用:
使用多个命令和条件处理符号
您可以使用条件处理符号从单个命令行或脚本运行多个命令。当您使用条件处理符号运行多个命令时,条件处理符号右侧的命令将根据条件处理符号左侧的命令结果进行操作。
例如,您可能只想在上一个命令失败时运行命令。或者,您可能只想在上一个命令成功时运行命令。
您可以使用下表中列出的特殊字符传递多个命令。
& [...]
command1 & command2
用于在一个命令行上分隔多个命令。 Cmd.exe运行第一个命令,然后运行第二个命令。
&& [...]
command1 && command2
用于运行&&amp ;;之后的命令仅当符号前面的命令成功时。 Cmd.exe运行第一个命令,然后仅在第一个命令成功完成时运行第二个命令。
|| [...]
command1 || command2
用于在||后面运行命令只有前面的命令是||失败。 Cmd.exe运行第一个命令,然后仅在第一个命令未成功完成时才运行第二个命令(收到大于零的错误代码)。
( ) [...]
(command1 & command2)
用于分组或嵌套多个命令。
; or ,
command1 parameter1;parameter2
用于分隔命令参数。
答案 2 :(得分:68)
&
是;
(运行命令)的Bash等价物,&&
是&&
的Bash等价物(仅当前一个没有引起错误时才运行命令)。
答案 3 :(得分:24)
你可以使用&一个接一个地运行命令。示例:c:\dir & vim myFile.txt
答案 4 :(得分:17)
如果要创建cmd快捷方式(例如在桌面上)添加/ k参数(/ k表示保持,/ c将关闭窗口):
cmd /k echo hello && cd c:\ && cd Windows
答案 5 :(得分:13)
您可以使用调用来克服过早评估环境变量的问题 - 例如
set A=Hello & call echo %A%
答案 6 :(得分:7)
所以,我试图从上下文菜单中启用运行RegAsm
(注册程序集)的特定任务。我遇到的问题是,在我阅读之前,结果会闪现并消失。所以我尝试使用管道Pause
,这在命令失败时不起作用(如Pause command not working in .bat script和Batch file command PAUSE does not work所述)。所以我尝试了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"
现在我有一个很好的右键菜单来注册一个程序集。
答案 7 :(得分:7)
在同一行上运行多个命令时可以使用多个processing symbols,并且在某些情况下可能会导致处理重定向,在其他情况下会改变输出,或者只是失败。一个重要的例子是放置操作变量的同一行命令。
@echo off
setlocal enabledelayedexpansion
set count=0
set "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
答案 8 :(得分:6)
cmd /c ipconfig /all & Output.txt
此命令执行命令并在单个命令中打开Output.txt
文件
答案 9 :(得分:4)
为了同时执行两个命令,你必须放一个& (&符号)两个命令之间的符号。像这样:
color 0a & start chrome.exe
干杯!
答案 10 :(得分:4)
嗯,您有两种选择:管道,或只是&
:
DIR /S & START FILE.TXT
或者,
tasklist | find "notepad.exe"
管道(|
)更多的是用于获取一个命令的输出,并将其放入另一个命令。而且(&
)只是说这样做,那就是。
答案 11 :(得分:4)
我尝试在同一个窗口中有两个ping,它是同一行上的串行命令。完成第一个命令后,运行第二个命令。
解决方案是在Windows 7命令提示符下与start /b
结合使用。
照常开始,不用/b
,然后在另一个窗口中启动。
用于在同一行中启动的命令是:
start /b command1 parameters & command2 parameters
无论如何,如果你想解析输出,我不建议使用它。 我注意到输出在命令输出之间被加扰。
答案 12 :(得分:2)
不,cd / && tree && echo %time%
。回显的时间是第一个命令执行的时间。
管道存在一些问题,但只要人们知道它是如何工作的,它就不重要了。
答案 13 :(得分:1)
还有一个例子:例如,当我们使用gulp
构建系统时,而不是
gulp
- 默认>构建
gulp build
- 构建build-folder
gulp watch
- 启动文件监视
gulp dist
- 构建dist-folder
我们可以用一行来做到这一点:
cd c:\xampp\htdocs\project & gulp & gulp watch
答案 14 :(得分:1)
这很简单:只需将它们与&&和迹象。 示例:
echo Hello World && echo GoodBye World
Goodbye World将在Hello World之后打印。
答案 15 :(得分:1)
在Windows中使用&
符号在一行中使用命令
C:\Users\Arshdeep Singh>cd Desktop\PROJECTS\PYTHON\programiz & jupyter notebook
就像在Linux中一样 我们使用
touch thisfile ; ls -lstrh
答案 16 :(得分:0)
是的。是&。
&&将在命令1完成后执行命令2,前提是它没有失败。
&都会执行。
答案 17 :(得分:0)
在Windows 10中,您还可以使用scriptrunner:
ScriptRunner.exe -appvscript demoA.cmd arg1 arg2 -appvscriptrunnerparameters -wait -timeout=30 -rollbackonerror -appvscript demoB.ps1 arg3 arg4 -appvscriptrunnerparameters -wait -timeout=30 -rollbackonerror
它使您可以在一行上启动几个命令,以使它们可以连续运行或彼此不等待,可以将超时和回滚置于错误状态。
答案 18 :(得分:0)
尝试使用doskey
键和$T
用等效于&
的那几行创建一个.bat ot .cmd文件,仅在一行中执行几个命令行:>
touch=echo off $T echo. ^> $* $T dir /B $T echo on
它将创建一个空文件。
示例:
touch myfile
在cmd中,您将得到以下内容:
但是正如其他人先前所提到的那样,实际上建议使用&
运算符在CMD提示符下的一行中执行许多命令行。
享受=)
答案 19 :(得分:-3)
在它们之间添加&& 喜欢:Cls && echo 'hello' && dir c: