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

在Linux中我会这样做

touch thisfile ; ls -lstrh

在Windows上是怎么做的呢?


当前回答

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

其他回答

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

@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

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

Gulp -默认>构建

Gulp构建-构建构建文件夹

Gulp watch -开始文件监视

Gulp dist- build dist-folder

我们可以用一行代码来实现:

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

自2000年以来,所有的微软操作系统都是这样的,直到今天仍然很好:

dir & echo foo

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

dir && echo foo

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

关于这一点,您还可以在滚动本页面时找到其他一些观点。

下面是一些历史数据,供那些觉得有教育意义的人参考。

在此之前,&&语法只是shell替代品4DOS的一个特性,之后该特性被添加到微软命令解释器中。

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

dir | echo foo

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

dir ^T echo foo

我试图创建批处理文件启动提升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"

结果如下:

也许这能帮到别人:)

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

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

像往常一样启动,不带/b,并在单独的窗口中启动。

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

start /b command1 parameters & command2 parameters

无论如何,如果您希望解析输出,我不建议使用这种方法。 我注意到输出在命令的输出之间被打乱了。