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


65

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

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

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

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

Ответы:


105

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

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

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


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

И %command%может выполнить эту строку в качестве команды, увиденной здесь
KIRBY INHALES U

-1

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

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

Ответы не должны содержать комментарии, такие как «Спасибо за это», они отвлекают от вашего решения. Вы должны рассмотреть возможность редактирования этого ответа, чтобы он просто отвечал на вопрос, с максимально возможной детализацией, но без шума (то есть команды, которая не работает)
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 выполнит каждую команду и завершит работу для следующей строки, не говоря, что это лучше, чем &&, просто это легко.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.