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

T. *_*one 77 windows command-line

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

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

svn update; copy *.* c:\development\copy\
Run Code Online (Sandbox Code Playgroud)

那显然行不通。是否有像“;”这样的字符或分隔符 执行这样的事情?

Pho*_*shi 118

就在这里。它是&

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

& 无论如何都会执行。

  • 'DOS' 作为一个术语通常用于*描述* cmd,并且看到操作使用 svn 我非常怀疑他仍在使用 DOS。无需迂腐:) (24认同)
  • 我认为可以安全地假设当有人提到“DOS”时,他们的意思是“Windows 命令提示符”。我要冒昧地说一句,现在大多数人可能不怎么使用 DOS。感谢您的更正 - 在这个时代,这有点不必要。 (9认同)
  • `&` 和 `&&` 只适用于 Windows 的 `cmd.exe` - 这是 _not_ DOS。 (8认同)

Kev*_*gan 6

如果你想用 1 行执行多个命令start,例如,如果你想执行这样的命令:

start "" netsh dump && pause
Run Code Online (Sandbox Code Playgroud)

然后,您需要分 2 步完成(单行解决方案在此答案的末尾)。

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

echo netsh dump ^&^& pause ^&^& exit>foobar.cmd
  -or-
echo netsh dump ^& pause ^& exit>foobar.cmd
Run Code Online (Sandbox Code Playgroud)

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

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

start "" foobar.cmd
  -or-
start "" "temporary foobar.cmd"
Run Code Online (Sandbox Code Playgroud)


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

start "" "temporary foobar.cmd"

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

start "temporary foobar.cmd"

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

如果你想start等待批处理文件完成(在pause被解雇之后),在start完成之前,那么你需要/wstart命令中添加开关:

start "" /w foobar.cmd
Run Code Online (Sandbox Code Playgroud)

您可以将所有这些放在一行中,甚至可以移除(删除)临时批处理文件 ( 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
Run Code Online (Sandbox Code Playgroud)

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