Відповіді:
Як це робиться на всіх операційних системах Microsoft починаючи з 2000 року і досі добре:
dir & echo foo
Якщо ви хочете, щоб друга команда виконувалася лише в тому випадку, якщо перша успішно завершилася:
dir && echo foo
Єдиний синтаксис ampersand (&) для виконання декількох команд в одному рядку повертається до Windows XP, Windows 2000 та деяких попередніх версій NT. (4,0 принаймні, за даними одного з коментаторів тут.)
З цього приводу існує досить багато інших пунктів, які ви можете прокрутити по цій сторінці.
Історичні дані випливають для тих, хто вважає це навчальним.
До цього синтаксис && був лише функцією заміни оболонки 4DOS до того, як ця функція була додана до інтерпретатора команд Microsoft.
У Windows 95, 98 та ME ви замість цього використовуєте символ "pipe":
dir | echo foo
У MS-DOS 5.0 і пізніших версіях, через деякі більш ранні версії Windows та NT інтерпретатора команд, (недокументований) роздільник команд мав символ 20 (Ctrl + T), який я тут представляю з ^ T.
dir ^T echo foo
cmd
підказці, тому я вважаю, що це не погана звичка потрапляти. :)
Цитата з документації:
Використання декількох команд та умовних символів обробки
Ви можете запускати кілька команд з одного командного рядка або сценарію, використовуючи умовні символи обробки. Коли ви запускаєте кілька команд із умовними символами обробки, команди праворуч від символу умовної обробки діють на основі результатів команди зліва від символу умовної обробки.
Наприклад, ви можете запустити команду, лише якщо попередня команда не працює. Або ви можете запустити команду, лише якщо попередня команда була успішною.
Ви можете використовувати спеціальні символи, перелічені в наступній таблиці, для передачі декількох команд.
& [...]
command1 & command2
Використовуйте для розділення декількох команд в одному командному рядку. Cmd.exe виконує першу команду, а потім другу команду.
&& [...]
command1 && command2
Використовуйте для запуску команди після &&, лише якщо команда, що передує символу, успішна. Cmd.exe виконує першу команду, а потім виконує другу команду, лише якщо перша команда успішно виконана.
|| [...]
command1 || command2
Використовуйте для запуску команди, наступної || тільки якщо команда, що передує || не вдається. Cmd.exe виконує першу команду, а потім виконує другу команду лише в тому випадку, якщо перша команда не була успішно виконана (отримує код помилки, більший за нуль).
( ) [...]
(command1 & command2)
Використовуйте для групування або вкладення декількох команд.
; or ,
command1 parameter1;parameter2
Використовуйте для розділення параметрів команди.
cmd /c "echo foo & echo bar"
.
vagrant up && vagrant ssh
працював без лапок у Windows 10.
&
- робить це асинхронним і виконує обоє паралельно. Я застряг, тому що я використовував &&
синхронно і продовжується лише у випадку успіху першого!
&
не робить команди асинхронними або паралельними. command1 & command2
запуститься command2
після command1
завершення. Успіх чи невдача не command1
має значення.
&
є еквівалентом Bash для ;
(запускати команди) і &&
є еквівалентом Bash &&
(виконувати команди лише тоді, коли попередні не спричинили помилку).
;
в Linux
;
означає запустити першу команду, дочекатися її завершення, а потім виконати другу команду. &
означає запустити першу команду, поставити її на другий план і виконати другу команду. Тож обидві програми запускаються одночасно. Зауважте, що це не комбінуючі символи, вони є символами, що відносяться до першої команди; ви можете запустити одну команду у фоновому режимі, progname &
не маючи другої команди.
Ви можете використовувати & для запуску команд одна за одною. Приклад:c:\dir & vim myFile.txt
Якщо ви хочете створити ярлик cmd (наприклад, на робочому столі), додайте параметр / k (/ k означає зберегти, / c закриє вікно):
cmd /k echo hello && cd c:\ && cd Windows
Ви можете використовувати call для подолання проблеми змінних середовищ, що оцінюються занадто рано - наприклад
set A=Hello & call echo %A%
echo
виводиться старе значення, а не нове значення. Принаймні, це те, що я спостерігаю у своєму вікні Windows 7.
setlocal EnableDelayedExpansion
у сценарії чи cmd /v
). Наприклад: timeout 5 && cmd /v /c echo !TIME! && echo %TIME%
.
Ряд символів обробки може використовуватися при виконанні декількох команд в одному рядку, а в деяких випадках може призвести до перенаправлення обробки, змінити вихід в іншому випадку або просто вийти з ладу. Один важливий випадок - розміщення в одному рядку команд, що маніпулюють змінними.
@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
cmd /V:ON /c "set i=5 & set arg!i!=MyFile!i! & echo path!i!=%temp%\%arg!i!%"
Отже, я намагався включити конкретне завдання запуску RegAsm
(складання реєстру) з контекстного меню. Проблема в мене полягала в тому, що результат спалахне і згасне, перш ніж я зможу його прочитати. Тож я спробував piping до Pause
, який не працює, коли команда не спрацьовує (як згадувалося тут, команда "Пауза" не працює в .bat скрипті і тут команда Batch file PAUSE не працює ). Тому я спробував, cmd /k
але це залишає вікно відкритим для отримання більшої кількості команд (я просто хочу прочитати результат). Тому я додав pause
послідовно exit
ланцюжок, в результаті чого:
cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit
Це працює як шарм - RegAsm працює у файлі та показує його результати, потім з'являється запит "Натисніть будь-яку клавішу для продовження ...", тоді вікно командного рядка закривається при натисканні клавіші.
PS Для інших, хто може вас зацікавити, ви можете скористатися такими записами .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"
Тепер у мене є гарне меню правою кнопкою миші, щоб зареєструвати збірку.
Я намагаюся мати два пінгви в одному вікні, і це послідовна команда в одному рядку. Закінчивши першу, запустіть другу команду.
Рішення полягало в поєднанні з start /b
командним рядком Windows 7.
Почніть як завжди, без /b
, і запустіть в окремому вікні.
Команда, що використовується для запуску в одному рядку:
start /b command1 parameters & command2 parameters
У будь-якому випадку, якщо ви хочете проаналізувати вихід, я не рекомендую використовувати це. Я помітив, що вихід між кодом команд.
Ну, у вас є два варіанти: трубопровід, або просто &
:
DIR /S & START FILE.TXT
Або,
tasklist | find "notepad.exe"
Piping ( |
) більше призначений для отримання результатів однієї команди та введення її в іншу. І ( &
) просто говорить запустити це, і це.
&
і |
робити , і як вони відрізняються, якщо взагалі? Зараз люди, незнайомі з цими поняттями, не в змозі самі вирішити, який із них слід використовувати.
Ні, cd / && tree && echo %time%
. Час лунає, коли виконується перша команда.
У трубопроводах є певна проблема, але це не критично, поки люди знають, як це працює.
Ще один приклад: Наприклад, коли ми використовуємо систему gulp
збирання замість
gulp
- за замовчуванням> збірка
gulp build
- побудувати збірку-папку
gulp watch
- запустити перегляд файлів
gulp dist
- побудувати dist-папку
Ми можемо це зробити одним рядком:
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%
?Так, є. Це &
.
&&
виконає команду 2, коли команда 1 буде завершена, якщо вона не вийшла з ладу.
&
виконується незалежно.
Використовуйте &
символ у Windows для використання команди в одному рядку
C:\Users\Arshdeep Singh>cd Desktop\PROJECTS\PYTHON\programiz & jupyter notebook
як у Linux, який ми використовуємо,
touch thisfile ; ls -lstrh
Це просто: просто розмежуйте їх за &&
знаками. Приклад:
echo "Hello World" && echo "GoodBye World".
"Goodbye World" буде надруковано після "Hello World".
&&
є умовним оператором, наступна команда виконується лише тоді, коли перша команда вдалася (errorlevel = 0)
Hello World
не пройшов. як сказав @jeb, &&
це умовно. &
виконує команди незалежно від того, попередній був успішним чи ні.