Как запустить две команды в одной строке в Windows CMD?
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
цитата из документации:
- Источник: Microsoft, Windows XP профессиональная документация по продукту,общие сведения о командной оболочке
использование нескольких команд и символов условной обработки
можно выполнять несколько команд из одной командной строки или сценария с помощью сиволов условной обработки. При выполнении нескольких команд с условным обработка символов команды справа от условного символа обработки действуют на основе результатов команды слева от условного символа обработки.
например, может потребоваться выполнить команду только в случае сбоя предыдущей команды. Или может потребоваться выполнить команду только в том случае, если предыдущая команда выполнена успешно.
для передачи нескольких команд можно использовать специальные символы, перечисленные в следующей таблице.
& [...]
command1 & command2
Используется для разделения нескольких команд в одной командной строке. УМК.exe запускает первую команду, а затем вторую команду.
&& [...]
command1 && command2
Использовать для выполнения команды&&, только если команда, стоящая перед символом успеха. УМК.exe запускает первую команду, а затем запускает вторую команду, только если первая команда выполнена успешно.
|| [...]
command1 || command2
Используйте для выполнения следующей команды / / только в том случае, если предыдущая команда || не выполняется. УМК.exe запускает первую команду, а затем запускает вторую команду, только если первая команда не завершена успешно (получает код ошибки больше нуля).
( ) [...]
(command1 & command2)
Используется для группировки или вложения команд.
; or ,
command1 parameter1;parameter2
Использовать для отдельные параметры.
&
является эквивалентом Bash для ;
( команды run) и &&
является эквивалентом Bash &&
(запуск команд только тогда, когда предыдущий не вызвал ошибку).
Если вы хотите создать ярлык 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%
- закрывающие скобки завершают ваше групповое заявление
- двойные кавычки не позволяют использовать
%PATH%
для решения проблемы скобок - и что будет ссылаться на переменную, как
%USERPROFILE%
содержать?