我想在Windows CMD控制台中运行两个命令 .
在Linux中,我会这样做
touch thisfile ; ls -lstrh
它是如何在Windows上完成的?
还有一个例子:例如,当我们使用 gulp 构建系统时,而不是
gulp
gulp - 默认>构建
gulp build - 构建build-folder
gulp build
gulp watch - 启动文件监视
gulp watch
gulp dist - 构建dist文件夹
gulp dist
我们可以用一行来做到这一点:
cd c:\xampp\htdocs\project & gulp & gulp watch
嗯,你有两个选择:管道,或只是 & :
&
DIR /S & START FILE.TXT
要么,
tasklist | find "notepad.exe"
管道( | )更多用于获取一个命令的输出,并将其放入另一个命令 . 并且( & )只是说运行这个,那个 .
|
It's simple: 只是用&&符号区分它们 . 例:
echo Hello World && echo GoodBye World
再见世界将在Hello World之后打印 .
如果要创建cmd快捷方式(例如在桌面上)添加/ k参数(/ k表示保持,/ c将关闭窗口):
cmd /k echo hello && cd c:\ && cd Windows
您可以使用&一个接一个地运行命令 . 示例: c:\dir & vim myFile.txt
c:\dir & vim myFile.txt
在同一行上运行多个命令时可以使用多个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
cmd /c ipconfig /all & Output.txt
此命令执行命令并在单个命令中打开 Output.txt 文件
Output.txt
& 是 ; (运行命令)的Bash等价物, && 是 && 的Bash等价物(仅当前一个没有引起错误时才运行命令) .
;
&&
当您尝试在一行中使用或操作变量时要小心其内容!例如 . 一个如下变量
PATH = C:\ Program Files(x86)\ somewhere;“C:\ Company \ Cool Tool”;%USERPROFILE%\ AppData \ Local \ Microsoft \ WindowsApps;
如果你用它作为 %PATH% 可能会导致许多无法解决的麻烦
%PATH%
结束括号将终止您的组声明
双引号不允许您使用 %PATH% 来处理括号问题
像 %USERPROFILE% 这样的引用变量包含什么?
%USERPROFILE%
为了同时执行两个命令,必须在两个命令之间放置一个&(和号)符号 . 像这样:
color 0a & start chrome.exe
干杯!
文件引用:
使用多个命令和条件处理符号您可以使用条件处理符号从单个命令行或脚本运行多个命令 . 当您使用条件处理符号运行多个命令时,条件处理符号右侧的命令将根据条件处理符号左侧的命令结果进行操作 . 例如,您可能只想在上一个命令失败时运行命令 . 或者,您可能只想在上一个命令成功时运行命令 . 您可以使用下表中列出的特殊字符来传递多个命令 . &[...] command1&command2用于在一个命令行上分隔多个命令 . Cmd.exe运行第一个命令,然后运行第二个命令 . && [...] command1 && command2用于仅在符号前面的命令成功时运行&&后面的命令 . Cmd.exe运行第一个命令,然后仅在第一个命令成功完成时运行第二个命令 . || [...] command1 || command2用于在||之后运行命令只有在||之前的命令失败 . Cmd.exe运行第一个命令,然后仅在第一个命令未成功完成时才运行第二个命令(接收大于零的错误代码) . ()[...](command1&command2)用于分组或嵌套多个命令 . ;或者,command1 parameter1; parameter2用于分隔命令参数 .
像这样在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
不, cd / && tree && echo %time% . 回显的时间是执行第一个命令的时间 .
cd / && tree && echo %time%
管道有一些问题,但只要人们知道它是如何工作的,它就不是关键 .
我尝试在同一个窗口中有两个ping,它是同一行上的串行命令 . 完成第一个命令后,运行第二个命令 .
解决方案是在Windows 7命令提示符下与 start /b 结合使用 .
start /b
像往常一样启动,没有 /b ,并在单独的窗口中启动 .
/b
用于在同一行中启动的命令是:
start /b command1 parameters & command2 parameters
无论如何,如果你想解析输出,我不建议使用它 . 我注意到输出在命令输出之间被加扰 .
您可以使用调用来克服过早评估环境变量的问题 - 例如
set A=Hello & call echo %A%
所以,我试图从上下文菜单中启用运行 RegAsm (注册程序集)的特定任务 . 我遇到的问题是,在我阅读之前,结果会闪烁并消失 . 所以我尝试使用 Pause 管道,当命令失败时这不起作用(如Pause command not working in .bat script和此处Batch file command PAUSE does not work所述) . 所以我尝试了 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在文件上运行并显示其结果,然后显示“按任意键继续...”提示,然后按下键时命令提示窗口关闭 .
附:对于可能感兴趣的其他人,您可以使用以下.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"
现在我有一个很好的右键菜单来注册一个程序集 .
16 回答
还有一个例子:例如,当我们使用
gulp
构建系统时,而不是gulp
- 默认>构建gulp build
- 构建build-foldergulp watch
- 启动文件监视gulp dist
- 构建dist文件夹我们可以用一行来做到这一点:
嗯,你有两个选择:管道,或只是
&
:要么,
管道(
|
)更多用于获取一个命令的输出,并将其放入另一个命令 . 并且(&
)只是说运行这个,那个 .It's simple: 只是用&&符号区分它们 . 例:
再见世界将在Hello World之后打印 .
如果要创建cmd快捷方式(例如在桌面上)添加/ k参数(/ k表示保持,/ c将关闭窗口):
您可以使用&一个接一个地运行命令 . 示例:
c:\dir & vim myFile.txt
在同一行上运行多个命令时可以使用多个processing symbols,并且在某些情况下可能导致处理重定向,在其他情况下会改变输出,或者只是失败 . 一个重要的例子是放置操作变量的同一行命令 .
正如您在上面的示例中所看到的,当使用变量的命令放在同一行上时,您必须使用延迟扩展来更新变量值 . 如果您的变量已编制索引,请使用带有%%修饰符的CALL命令在同一行上更新其值:
cmd /c ipconfig /all & Output.txt
此命令执行命令并在单个命令中打开
Output.txt
文件&
是;
(运行命令)的Bash等价物,&&
是&&
的Bash等价物(仅当前一个没有引起错误时才运行命令) .当您尝试在一行中使用或操作变量时要小心其内容!例如 . 一个如下变量
如果你用它作为
%PATH%
可能会导致许多无法解决的麻烦结束括号将终止您的组声明
双引号不允许您使用
%PATH%
来处理括号问题像
%USERPROFILE%
这样的引用变量包含什么?为了同时执行两个命令,必须在两个命令之间放置一个&(和号)符号 . 像这样:
干杯!
文件引用:
像这样在2000年以来的所有Microsoft操作系统上,今天仍然很好:
如果您希望第二个命令仅在第一个命令成功退出时执行:
在一行上执行多个命令的单个&符号(&)语法可以追溯到Windows XP,Windows 2000和一些早期的NT版本 . (至少4.0,据一位评论者说 . )
关于这一点还有很多其他要点,你会发现在这个页面上向下滚动 .
对于那些可能认为有教育意义的人来说,历史数据如下
在此之前,在将该功能添加到Microsoft命令解释程序之前,&&语法只是shell替换4DOS的一项功能 .
在Windows 95,98和ME中,您将使用管道符:
在MS-DOS 5.0及更高版本中,通过一些早期Windows和NT版本的命令解释程序,(未记录的)命令分隔符是字符20(Ctrl T),我将在这里用^ T表示 .
不,
cd / && tree && echo %time%
. 回显的时间是执行第一个命令的时间 .管道有一些问题,但只要人们知道它是如何工作的,它就不是关键 .
我尝试在同一个窗口中有两个ping,它是同一行上的串行命令 . 完成第一个命令后,运行第二个命令 .
解决方案是在Windows 7命令提示符下与
start /b
结合使用 .像往常一样启动,没有
/b
,并在单独的窗口中启动 .用于在同一行中启动的命令是:
无论如何,如果你想解析输出,我不建议使用它 . 我注意到输出在命令输出之间被加扰 .
您可以使用调用来克服过早评估环境变量的问题 - 例如
所以,我试图从上下文菜单中启用运行
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在文件上运行并显示其结果,然后显示“按任意键继续...”提示,然后按下键时命令提示窗口关闭 .
附:对于可能感兴趣的其他人,您可以使用以下.reg文件条目将dllfile关联添加到.dll文件,然后将RegAsm命令扩展名添加到该文件(请注意转义的引号和反斜杠):
现在我有一个很好的右键菜单来注册一个程序集 .