在Windows命令行中用1行执行多个命令?


65

如何仅用一行执行Windows命令行中的多个命令?

例如,说我要执行SVN更新,然后将所有文件复制到另一个位置...

svn update; copy *.* c:\development\copy\

那显然行不通。是否有像';'这样的字符或定界符?执行这样的事情?

Answers:


105

就在这里。是&

&& 如果命令1没有失败,它将在命令2完成时执行命令2。

& 不管执行。


7
&&&仅适用于Windows'- cmd.exe不是 DOS。
grawity

22
“ DOS”一词通常用于描述 cmd,并且由于操作员使用svn,我非常怀疑他仍在使用DOS。无需学究:)
Phoshi

那里:urlencode.blogspot.com/2009/06/vista-desktop-june-09.html他使用Windows XP。当然不是DOS(它看上去从未如此出色;))
Phoshi

8
我认为可以肯定地说,当有人提到“ DOS”时,它们的意思就是“ Windows命令提示符”。我要在这里走出去,说大多数人这些天可能不太使用DOS。感谢您的更正-在当今时代,这是不必要的。
默多克开膛手

@MurdochRipper是什么意思?我正在DOS中查看此问题。;)
安德鲁(Andrew

4

至少在MS-DOS 6.22中,我曾经使用键Ctrl+ T来获得一种段落符号。就像&Phoshi提到的那样。但是,如果您正在运行doskey.exe,这将仅起作用。


4

start例如,如果要用1行执行多个命令,则以开头的命令,例如,如果要执行这样的命令:

start "" netsh dump && pause

然后,您需要分两个步骤进行操作(此答案的结尾处是一线解决方案)。

首先,将命令写入临时批处理文件(在这种情况下,您可以使用&&&):

echo netsh dump ^&^& pause ^&^& exit>foobar.cmd
  -or-
echo netsh dump ^& pause ^& exit>foobar.cmd

请注意,您需要使用来“转义”每个"&"s(“&”号),"^" 以使其在echo命令中被视为普通字符。或者,您可以使用文本编辑器(例如记事本)创建临时批处理文件。

然后,使用start来启动批处理文件:

start "" foobar.cmd
  -or-
start "" "temporary foobar.cmd"


注意:空的双引号用于"Title"将在start打开的命令窗口的标题栏中显示的对。从"Title"技术上讲,此参数是的可选参数start,但是如果要运行的命令是双引号,则实际上是必需的start。例如,在第二个示例中:

start "" "temporary foobar.cmd"

如果您省略像这样的空双引号对:

start "temporary foobar.cmd"

然后start将打开一个新命令窗口,并"temporary foobar.cmd"用作新命令窗口"Title",并且在新命令窗口中将不会执行任何操作。)

如果要start等待批处理文件完成(在pause关闭后),然后再start完成,则需要将/w开关添加到start命令中:

start "" /w foobar.cmd

您可以将所有内容放到一行上,甚至删除(删除)临时批处理文件(foobar.cmd):

echo netsh dump ^&^& pause ^&^& exit>foobar.cmd && start "" /w foobar.cmd && del foobar.cmd
  -or-
echo netsh dump ^& pause ^& exit>foobar.cmd & start "" /w foobar.cmd & del foobar.cmd

请注意,如果要删除临时批处理文件,则需要start使用该/w开关运行,否则,临时批处理文件可能会在有机会运行之前被删除。


删除文件之前,/w可以先睡一会儿timeout 2例如,将做到这一点。
安东尼奥

@ kevin-fegan为什么需要临时的cmd文件???
maxxyme

0

如果要用if包装第一个命令,但是无论如何仍要执行第二个命令,则必须用cmd / c包装if,如下所示:

cmd / c如果存在abc。(rd / q abc)&回声你好

如果您没有在if前面加上cmd / c,则整个命令将成为if(您可能不需要)的一部分。


或者您可以说(if exist abc. command₁) & command₂
斯科特(Scott)

@Scott我知道在这些站点上赞美是一种罪过,但是合法性start "" cmd /c "(command₁) & (command₂)"在网络上的任何地方都没有得到回答,而是链接大多数批处理语句的唯一方法。恭喜你。
约翰·肯斯

1
感谢您的赞美/祝贺,但我不明白您在说什么。user138334说:“如果您要用an来包装第一个命令,if但是无论如何还是要执行第二个命令,那么您也必须if用a 来包装cmd /c”,我以一种不带的方式进行了响应cmd /c。那么,为什么要说链接大多数批处理语句的唯一方法是使用cmd /c?而为什么要start投入其中呢?
斯科特(Scott)

0

是的,使用&

%command1% & %command2% 运行两个命令

%command1% && %command2% 运行第一个命令,如果可以运行第二个命令

%command1% || %command2% 运行第一个命令,如果失败,则运行seconds命令

这里


而且&&&||实际上不是一个命令,这是一批的一部分。不是命令。
KIRBY INHALES U

%command%可以将该字符串作为命令执行,请参见此处
KIRBY INHALES U

-1

我发现使用“开始”可以修复多个命令的正常运行(我正在运行Windows 10 Home)。例如:

START chrome.exe "page.web.com" & timeout 20

答案中不应包含评论,例如“谢谢”,它会分散您的解决方案的注意力。您应该考虑编辑此答案,因此它仅需尽可能详细地回答问题,而不会产生干扰(即,该命令无效)
Ramhound16年

他正在寻找的不是&,不是start
NetwOrchestration 2016年

这能解决什么问题?不输入命令行时会发生什么start
斯科特(Scott)

-2

制作一个短文件名bat.bat的批处理文件。

add cmd /c %1 
    cmd /c %2 
rem

等到9行并保存

然后使用双引号

bat "command one" "command two" "command three" 

cmd /c 将运行每个命令并关闭下一行,并不是说这比&&更好,只是很简单。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.