Я хочу запустить две команды в консоли Windows CMD.
В Linux я бы сделал это следующим образом
touch thisfile ; ls -lstrh
Как это делается в Windows?
Так было на всех ОС Microsoft начиная с 2000 года, и хорошо работает до сих пор:
dir & echo foo
Если вы хотите, чтобы вторая команда выполнялась только при успешном завершении первой:
dir && echo foo
Синтаксис одиночного амперсанда (&) для выполнения нескольких команд в одной строке восходит к Windows XP, Windows 2000 и некоторым ранним версиям NT. (По крайней мере, 4.0, согласно одному из комментаторов здесь).
Есть много других моментов, которые вы найдете, прокручивая эту страницу вниз.
Далее следуют исторические данные, для тех, кому они могут показаться познавательными.
До этого синтаксис && был только особенностью оболочки, заменяющей 4DOS, прежде чем эта возможность была добавлена в командный интерпретатор Microsoft.
В Windows 95, 98 и ME вместо него использовался символ трубы:
dir | echo foo
В MS-DOS 5.0 и более поздних версиях, а также в некоторых ранних версиях командного интерпретатора Windows и NT, (недокументированным) разделителем команд был символ 20 (Ctrl+T), который я'здесь буду обозначать ^T.
dir ^T echo foo
Цитата из документации:
Использование нескольких команд и символов условной обработки.
Вы можете запускать несколько команд из одной командной строки или сценария с помощью символов условной обработки. При выполнении нескольких команд с символами условной обработки команды, расположенные справа от символа условной обработки, действуют на основе результатов команды, расположенной слева от символа условной обработки.
Например, вы можете захотеть выполнить команду только в случае неудачи предыдущей команды. Или вы можете захотеть выполнить команду только в случае успешного выполнения предыдущей команды.
Для передачи нескольких команд можно использовать специальные символы, перечисленные в следующей таблице.
& [...]
команда1 & команда2
. Используются для разделения нескольких команд в одной командной строке. Cmd.exe выполняет первую команду, а затем вторую.
&& [...]
.команда1 && команда2
. Используется для запуска команды, следующей за &&, только если команда, предшествующая символу, выполнена успешно. Cmd.exe выполняет первую команду, а затем выполняет вторую команду, только если первая команда завершилась успешно.
|| [...]
команда1 || команда2
Используется для выполнения команды, следующей || только в том случае, если команда, предшествующая || не выполнилась. Cmd.exe выполняет первую команду, а затем выполняет вторую команду, только если первая команда не завершилась успешно (получила код ошибки больше нуля).
( ) [...]
(команда1 & команда2)
. Используется для группировки или вложения нескольких команд.
; или ,
команда1 параметр1;параметр2
Используется для разделения параметров команды.
Вы можете использовать & для запуска команд друг за другом. Пример: c:\dir & vim myFile.txt
.
Если вы хотите создать сочетание клавиш Cmd (например на рабочем столе) добавить параметр /к (/к означает сохранить, /C будет закрыть окно):
cmd /k echo hello && cd c:\ && cd Windows
Ряд символы обработка может использоваться при выполнении нескольких команд на одной строке, и может привести к обработке перенаправления в некоторых случаях, изменяя выход в другом случае, или просто плохо. Одно важное дело ставит на одни и те же команды строки, что манипулировать переменными.
@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
Итак, я пытаюсь разрешить конкретную задачу запуска RegAsm
(ассамблея регистр) из контекстного меню. Проблема заключалась в том, что результат будет мигать и уходи, пока я не мог прочитать. Так что я попытался трубопроводов "пауза", которая не работает, когда команда не выполняется (как упоминалось здесь https://stackoverflow.com/questions/9882019/pause-command-not-working-in-bat-script и здесь https://stackoverflow.com/questions/4666045/batch-file-command-pause-does-not-work). Так что я попробовал команду cmd /К, но оставляет окно открытым для других команд (я просто хочу прочитать результат). Поэтому я добавил "пауза", затем "выход" в цепочку, в результате чего:
я УМК /c:\windows\microsoft.net\framework\v4.0.30319\regasm.exe к&;%1" и /кодовой базы \" в%1\" и &АМП; пауза &ампер; выход
Это работает как шарм -- RegAsm работает на файла и показывает ее результаты, тогда и "нажмите любую клавишу для продолжения..." Не подскажите, затем в окне командной строки закроется при нажатии клавиши.
P. S. Для остальных, кто может быть заинтересован, можно использовать следующие .записи в REG-файл, чтобы добавить файл ассоциации .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"
Теперь у меня есть хороший контекстного меню, чтобы зарегистрировать сборку.
Я стараюсь иметь два пакета в одном окне, и это серийный команду в одной строке. После окончания первого, запустить вторую команду.
Решение было совместить с пуск /Б на команду Windows 7 подскажите.
Начнем, как обычно, без /Б
, и запустить в отдельном окне.
Команда, используемая для запуска в той же строке:
start /b command1 parameters & command2 parameters
Любым способом, если вы хотите, чтобы проанализировать выходные данные, я не'т рекомендуем использовать этой. Я заметил, что выход передается с выхода команд.
Ну, у вас есть два варианта: с пылу, или просто &
:
DIR /S & START FILE.TXT
Или,
tasklist | find "notepad.exe"
Трубопроводов (|
) является более для принятия вывода одной команды, и поставить ее в другую. И (&АМП;
) является просто говорю, что запускать это, и это.
Нет, кд / && дерево && Эхо %время%`. Время повторил это, когда первая команда выполняется.
Трубопровод имеет некоторые проблемы, но это не критично пока люди знают, как он работает.
Еще один пример: например, когда мы используем залпом
систему строить, а не
глоток
- по умолчанию > строить
станции строят - строят строят-папку
`залпом смотреть - файл-смотреть пуск
глоток дист
- построить дист-папку
Мы можем сделать это в одну строку:
cd c:\xampp\htdocs\project & gulp & gulp watch
Это'ы проста: просто дифференцировать их с &&
знаки.
Пример:
echo "Hello World" && echo "GoodBye World".
"прощай мир", будет напечатано после "Привет Мир" по.
При попытке использовать или манипулировать переменными в одном остерегайтесь их содержание! Е. Г. переменную как в следующем
путь=c: программные файлы(для x86)\где-то; и"инструмент C:\Company\Cool на";%ПРОФИЛЬ_ПОЛЬЗОВАТЕЛЯ%\AppData\местные\Майкрософт\WindowsApps;
может привести к большому количеству отпусти состоянии проблемы, если вы используете его как %путь%
%путь%
, чтобы справиться с проблемой скобок Да есть. Это'ы &
.
&&
будет выполнить команду 2, Когда 1 команда полное обеспечение это не'т не получится.
&
будет выполнять независимо.