Как запустить две команды в одной строке в Windows CMD?

Я хочу выполнить две команды в консоли Windows CMD.

В Linux я бы сделал это так

touch thisfile ; ls -lstrh

Как это делается в Windows?

Ответ 1

Как и во всех Microsoft-операционных системах с 2000 года, и сегодня все еще хорошо:

dir & echo foo

Если вы хотите, чтобы вторая команда выполнялась только в том случае, если первая успешно завершилась успешно:

dir && echo foo

Синтаксис одиночного амперсанда (&) для выполнения нескольких команд в одной строке возвращается к Windows XP, Windows 2000 и некоторым более ранним версиям NT. (По крайней мере, по словам одного комментатора здесь.)

В этом есть немало других моментов, которые вы можете прокрутить по этой странице.

Исторические данные следует за теми, кто может найти это образование.

До этого, && синтаксис был только функцией замены оболочки 4DOS, прежде чем эта функция была добавлена ​​в интерпретатор команд Microsoft.

В Windows 95, 98 и ME вместо этого вы должны использовать символ pipe:

dir | echo foo

В MS-DOS 5.0 и более поздних версиях, в некоторых более ранних версиях интерпретатора команд Windows и NT разделитель команд (недокументированный) был символом 20 (Ctrl + T), который я буду представлять здесь с помощью ^ T.

dir ^T echo foo

Ответ 2

Цитата из документации:

Использование нескольких команд и условной обработки символов

Вы можете запустить несколько команд из одной командной строки или сценария, используя условные символы обработки. Когда вы запускаете несколько команд с символами условной обработки, команды справа от символа условной обработки действуют на основе результатов команды слева от символа условной обработки.

Например, вы можете выполнить команду только в случае сбоя предыдущей команды. Или вы можете запустить команду, только если предыдущая команда была успешной.

Вы можете использовать специальные символы, перечисленные в следующей таблице, для передачи нескольких команд.

  • & [...]
    command1 & command2
    Используется для разделения нескольких команд в одной командной строке. Cmd.exe запускает первую команду, а затем вторую команду.

  • && [...]
    command1 && command2
    Используйте для запуска команды, следующей за &&, только если команда, предшествующая символу, успешна. Cmd.exe запускает первую команду, а затем запускает вторую команду, только если первая команда выполнена успешно.

  • || [...]
    command1 || command2
    Используйте для запуска команды, следующей за || только если команда предшествует || выходит из строя. Cmd.exe запускает первую команду, а затем запускает вторую команду только в том случае, если первая команда не выполнена успешно (получает код ошибки больше нуля).

  • ( ) [...]
    (command1 & command2)
    Используйте для группировки или вложения нескольких команд.

  • ; or ,
    command1 parameter1;parameter2
    Используйте для разделения параметров команды.

Ответ 3

& - эквивалент Bash для ; (команды запуска), а && - эквивалент Bash && (запуск команд только тогда, когда предыдущий не вызвал ошибку).

Ответ 4

Вы можете использовать и запускать команды один за другим. Пример: c:\dir & vim myFile.txt

Ответ 5

Если вы хотите создать ярлык cmd (например, на рабочем столе), добавьте параметр /k (/k означает keep,/c закроет окно):

cmd /k echo hello && cd c:\ && cd Windows

Ответ 6

Вы можете использовать вызов для решения проблемы слишком быстро оцениваемых переменных среды - например,

set A=Hello & call echo %A%

Ответ 7

Итак, я пытался включить конкретную задачу запуска RegAsm (сборка регистров) из контекстного меню. Проблема была в том, что результат вспыхнет и исчезнет, ​​прежде чем я смогу его прочитать. Поэтому я попытался подключиться к Pause, который не работает, когда команда не работает (как указано здесь команда Pause не работает в .bat script и здесь Пакетная команда PAUSE не работает). Поэтому я попробовал cmd /k, но это оставляет окно открытым для большего количества команд (я просто хочу прочитать результат). Поэтому я добавил в цепочку Pause, а затем exit, в результате получилось следующее:

cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit

Это работает как шарм - RegAsm работает над файлом и показывает его результаты, затем отображается приглашение "Нажмите любую клавишу, чтобы продолжить...", после чего окно командной строки закрывается при нажатии клавиши.

P.S. Для других, которым может быть интересно, вы можете использовать следующие записи в файле .reg, чтобы добавить ассоциацию dllfile в файлы .dll, а затем к ней добавьте расширение команды RegAsm (обратите внимание на экранированные кавычки и обратную косую черту):

[HKEY_CLASSES_ROOT\.dll]
"Content Type"="application/x-msdownload"
@="dllfile"

[HKEY_CLASSES_ROOT\dllfile]
@="Application Extension"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm]
@="Register Assembly"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm\command]
@="cmd /k C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\regasm.exe \"%1\" /codebase \"%1\" & pause & exit"

Теперь у меня есть приятное контекстное меню для регистрации сборки.

Ответ 8

Число символов обработки может использоваться при запуске нескольких команд в одной строке и может привести к переадресации обработки в некоторых случаях, изменение результата в другом случае или просто сбой. Одним из важных случаев является размещение в тех же командах строки, которые управляют переменными.

@echo off
setlocal enabledelayedexpansion
set count=0
set "count=1" & echo %count% !count!

0 1

Как вы видите в приведенном выше примере, когда команды с использованием переменных помещаются в одну строку, вы должны использовать задержанное расширение для обновления значений переменных. Если ваша переменная индексируется, используйте команду CALL с модификаторами %%, чтобы обновить ее значение в той же строке:

set "i=5" & set "arg!i!=MyFile!i!" & call echo path!i!=%temp%\%%arg!i!%%

path5=C:\Users\UserName\AppData\Local\Temp\MyFile5

Ответ 9

cmd /c ipconfig /all & Output.txt

Эта команда выполняет команду и открывает файл Output.txt в одной команде

Ответ 10

Чтобы одновременно выполнить две команды, вы должны поместить символ a и (амперсанд) между двумя командами. Например:

color 0a & start chrome.exe

Ура!

Ответ 11

Я пытаюсь иметь два пинга в одном окне, и это последовательная команда в той же строке. После завершения первого выполните вторую команду.

Решение должно было сочетаться с start /b в командной строке Windows 7.

Начать, как обычно, без /b и запустить в отдельном окне.

Команда, запускаемая в той же строке:

start /b command1 parameters & command2 parameters

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

Ответ 12

У вас есть два варианта: Piping или просто &:

DIR /S & START FILE.TXT

Или

tasklist | find "notepad.exe"

Трубопровод (|) больше подходит для вывода одной команды и помещает ее в другую. И (&) просто говорит, что запустите это, и это.

Ответ 13

Нет, cd / && tree && echo %time%. Время, на которое выполняется эхо-сигнал, находится при первой команде.

У трубопровода есть некоторые проблемы, но это не критично, если люди знают, как это работает.

Ответ 14

Еще один пример: например, когда мы используем систему сборки gulp вместо

gulp - default > build

gulp build - построить сборку

gulp watch - начать просмотр файлов

gulp dist - создать папку dist

Мы можем сделать это с одной строкой:

cd c:\xampp\htdocs\project & gulp & gulp watch

Ответ 15

Это просто: просто различать их с && знаки. Пример:

echo Hello World && echo GoodBye World

Goodbye World будет напечатан после Hello World.

Ответ 16

Когда вы пытаетесь использовать или манипулировать переменными в одной строке, остерегайтесь их содержимого! Например. переменная, подобная следующей

PATH=C:\Program Files (x86)\somewhere;"C:\Company\Cool Tool";%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;

может привести к большому количеству неприятностей, если вы используете его как %PATH%

  • Закрывающие круглые скобки завершают оператор группы
  • Двойные кавычки не позволяют использовать %PATH% для обработки задачи круглых скобок
  • И что будет содержать ссылочная переменная типа %USERPROFILE%?

Ответ 17

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

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

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