Выполнить несколько команд с 1 строкой в ​​командной строке Windows?

65

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

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

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

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

Т. Стоун
источник

Ответы:

105

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

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

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

Phoshi
источник
7
&и &&работают только в Windows'е cmd.exe- это не DOS.
Гравитация
22
Термин «DOS» часто используется для описания cmd, и, учитывая, что операционная система использует SVN, я очень сомневаюсь, что он все еще использует DOS. Не нужно быть педантичным :)
Phoshi 30.10.09
Там: urlencode.blogspot.com/2009/06/vista-desktop-june-09.html Он использует Windows XP. Конечно, не DOS (это никогда не выглядело так хорошо;))
Phoshi
8
Я думаю, можно с уверенностью предположить, что когда кто-то упоминает «DOS», он действительно означает «Командная строка Windows». Я собираюсь выйти на конечности и сказать, что большинство людей, вероятно, не пользуются DOS в эти дни. Спасибо за исправление - это просто немного ненужно в наши дни.
Мердок Риппер
@MurdochRipper Что ты имеешь в виду? Я просматриваю этот вопрос в DOS прямо сейчас. ;)
Андрей
4

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

Торбен Гундтофте-Бруун
источник
4

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

Кевин Феган
источник
Вместо этого /wможно было бы поставить короткий сон перед удалением файла. timeout 2сделаю это, например.
Антонио
@ kevin-fegan зачем тебе временный cmd файл ???
Максокс
0

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

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

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


источник
Или вы могли бы сказать(if exist abc. command₁) & command₂
Скотт
@ Скотт Я знаю, что комплименты являются грехом на этих сайтах, но они start "" cmd /c "(command₁) & (command₂)"не разрешены нигде в Интернете, но являются единственным способом связать большинство групповых заявлений. Поздравляю вас.
Джон Кенс
1
Я ценю комплименты / поздравления, но я не понимаю, что вы говорите. user138334 сказал: «Если вы хотите обернуть первую команду с помощью, ifно все равно хотите, чтобы вторую команду выполняли независимо, тогда вам нужно обернуть также и ifс cmd /c», и я ответил, что это можно сделать без cmd /c. Так почему же вы говорите, что единственный способ связать большинство пакетных операторов - это использовать cmd /c? И почему ты бросаешь startв смесь?
Скотт
0

Да использовать &!

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

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

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

Смотри здесь

КИРБИ ВДЫХАЕТ U
источник
А также &, &&и на ||самом деле это не команда, это часть пакета. Не команда.
КИРБИ ВДЫХАЕТ U
И %command%может выполнить эту строку в качестве команды, увиденной здесь
KIRBY INHALES U
-1

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

START chrome.exe "page.web.com" & timeout 20
bazzakay
источник
Ответы не должны содержать комментарии, такие как «Спасибо за это», они отвлекают от вашего решения. Вы должны рассмотреть возможность редактирования этого ответа, чтобы он просто отвечал на вопрос, с максимально возможной детализацией, но без шума (то есть команды, которая не работает)
Ramhound
То, что он ищет, &нет start!
NetwOrchestration
Какую проблему это решает? Что происходит при вводе командной строки без start?
Скотт
-2

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

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

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

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

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

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

боб
источник