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

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

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

touch thisfile ; ls -lstrh

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

16 ответов


как это на всех ОС Microsoft с 2000 года, и все еще хорошо сегодня:

dir & echo foo

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

dir && echo foo

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

есть немало других точек об этом вы найдете внизу эта страница.

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

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

В Windows 95, 98 и меня, вы бы использовать символ трубы вместо:

dir | echo foo

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

dir ^T echo foo

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

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

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

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

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

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

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

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

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

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


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


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


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

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

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

set A=Hello & call echo %A%

cmd /c ipconfig /all & Output.txt

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


Итак, я пытался включить конкретную задачу запуска RegAsm (Регистрация сборки) из контекстного меню. Проблема заключалась в том, что результат вспыхивал и уходил, прежде чем я мог его прочитать. Поэтому я попробовал пронзить Pause, который не работает, когда команда терпит неудачу (как упоминалось здесь команда паузы не работает .летучая мышь скрипт и здесь команда пакетного файла PAUSE не работает). Поэтому я попытался cmd /k но это оставляет окно открытым для дополнительных команд (I просто хочу прочитать результат). Поэтому я добавил 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"

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


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

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

0 1

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

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

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

чтобы выполнить две команды одновременно, необходимо поместить символ & (амперсанд) между двумя командами. Вот так:

color 0a & start chrome.exe

Ура!


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

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

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

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

start /b command1 parameters & command2 parameters

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


Ну, у вас есть два варианта: трубопровод, или просто &:

DIR /S & START FILE.TXT

или

tasklist | find "notepad.exe"

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


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

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


все просто: просто дифференцировать их с && признаки. Пример:

echo Hello World && echo GoodBye World

до свидания мир будет напечатан после Hello World.


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

gulp - по умолчанию > build

gulp build - build build-папка

gulp watch - запустить файл-смотреть

gulp dist - build dist-folder

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

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

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

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

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

  1. закрывающие скобки завершают ваше групповое заявление
  2. двойные кавычки не позволяют использовать %PATH% для решения проблемы скобок
  3. и что будет ссылаться на переменную, как %USERPROFILE% содержать?