64

Как я могу выполнить несколько команд в командной строке Windows с помощью одной строки?

Например, скажем, я хочу выполнить обновление SVN, а затем скопировать все файлы в другое место ...

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

Это не работает, очевидно. Есть ли символ или разделитель типа ';' выполнить что-то подобное?

7 ответов7

103

Да, есть. Это &.

&& выполнит команду 2, когда команда 1 будет выполнена, при условии, что она не завершилась.

& будет выполняться независимо.

4

По крайней мере, в MS-DOS 6.22 я использовал клавиши Ctrl+T, чтобы получить символ абзаца. Это работало так же , как и упомянутый Phoshi. Однако это будет работать, только если у вас запущен doskey.exe.

3

Если вы хотите выполнить несколько команд с одной строкой, где вы начинаете команды с start , например, если вы хотите выполнить такую команду:

start "" netsh dump && pause

Затем вам нужно сделать это в 2 шага (однострочное решение находится в конце этого ответа).

Сначала запишите команды во временный пакетный файл (в этом случае вы можете использовать & или &&):

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 , в противном случае временный пакетный файл, вероятно, будет удален, прежде чем он сможет запустить.

0

Да, используйте & !

%command1% & %command2% запускает обе команды

%command1% && %command2% запускает первую команду, если это сработало, введите вторую команду

%command1% || %command2% запускает первую команду, если это не удалось, выполните команду секунды

Смотрите здесь

0

Если вы хотите обернуть первую команду с помощью if, но все равно хотели бы, чтобы вторая команда выполнялась независимо, тогда вы должны обернуть if также с помощью cmd /c следующим образом:

cmd /c, если существует abc. (rd /q abc) и эхо привет

Если вы не ставите префикс if с помощью cmd /c, тогда вся команда становится частью if (чего вы, возможно, не хотите).

-1

Я обнаружил, что с помощью «START» исправлено несколько работающих команд (у меня Windows 10 Home). Например:

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

сделать пакетный файл с коротким именем т.е. bat.bat.

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

и так до 9 строк и сохранить

затем используйте его с двойными кавычками

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

cmd /c выполнит каждую команду и завершит работу для следующей строки, не говоря, что это лучше, чем &&, просто потому, что это легко.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .