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



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



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



touch thisfile ; ls -lstrh


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

1409   16  

16 ответов:

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

dir & echo foo

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

dir && echo foo

синтаксис single ampersand ( & ) для выполнения нескольких команд в одной строке восходит к 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, который не работает, когда команда терпит неудачу (как упоминалось здесь команда паузы не работает .летучая мышь скрипт и здесь командная пауза пакетного файла не работает). Так что я попробовал 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

прощай мир будет напечатан после Привет мира.

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

gulp - default > build

gulp build - build build-folder

gulp watch - start file-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% содержать?

Comments

    Ничего не найдено.