Виконати кілька команд з 1 рядка в командному рядку Windows?


65

Як я можу виконати кілька команд у командному рядку Windows лише одним рядком?

Наприклад, скажіть, що я хочу виконати оновлення SVN, а потім скопіювати всі файли в інше місце ...

svn update; copy *.* c:\development\copy\

Це очевидно не працює. Чи є символ чи роздільник типу ";" виконати щось подібне?

Відповіді:


105

Так, є. Це &.

&& виконає команду 2, коли команда 1 буде завершена, якщо вона не вийшла з ладу.

& виконується незалежно.


7
&і &&працювати тільки в Windows ' cmd.exe- що не DOS.
grawity

22
'DOS' як термін часто використовується для опису cmd, і бачачи, як op використовує svn, я дуже сумніваюся, що він все ще використовує DOS. Не потрібно бути педантичним :)
Фоші

Там: urlencode.blogspot.com/2009/06/vista-desktop-june-09.html Він використовує Windows XP. Звичайно, не DOS (це ніколи не виглядало так добре;))
Phoshi

8
Я думаю, що можна припустити, що коли хтось згадує "DOS", він насправді означає "командний рядок Windows". Я збираюся вийти на кінцівку тут і сказати, що більшість людей, мабуть, не використовують DOS в ці дні. Дякую за виправлення - це просто небажано в цей день та вік.
Мердок Ріппер

@MurdochRipper Що ти маєш на увазі? Зараз я переглядаю це питання в DOS. ;)
Андрій

4

Принаймні, в MS-DOS 6.22 я використовував ключ Ctrl+, Tщоб отримати своєрідний символ абзацу. Це спрацювало так само, як &згадував Фосі. Це працюватиме лише у тому випадку, якщо у вас запущено doskey.exe.


4

Якщо ви хочете виконати кілька команд з 1 рядка, де ви запускаєте команди start, наприклад, якщо ви хотіли виконати команду так:

start "" netsh dump && pause

Потім це потрібно зробити в 2 етапи (однорядкове рішення знаходиться в кінці цієї відповіді).

Спочатку запишіть команди у тимчасовий пакетний файл (у цьому випадку ви можете використовувати &або &&):

echo netsh dump ^&^& pause ^&^& exit>foobar.cmd
  -or-
echo netsh dump ^& pause ^& exit>foobar.cmd

Зауважте, що вам потрібно "уникнути" кожного з "&"s(амперсандів) з "^" символом a, щоб вони могли розглядатися як звичайні символи echoкоманди. Крім того, ви можете створити тимчасовий пакетний файл за допомогою текстового редактора, наприклад блокнота.

Потім використовуйте startдля запуску пакетного файлу:

start "" foobar.cmd
  -or-
start "" "temporary foobar.cmd"


Примітка . Порожня пара подвійних лапок - це "Title"те, що буде показано у рядку заголовка вікна команди, яке startвідкриється. Цей "Title"аргумент технічно є необов'язковим аргументом start, але він фактично необхідний , якщо команда, яка startбуде виконуватися, двічі цитується. Наприклад, у другому прикладі:

start "" "temporary foobar.cmd"

якщо ви залишите порожню пару подвійних лапок таким чином:

start "temporary foobar.cmd"

Потім startвідкриється нове вікно командного рядка, а також використовувати в "temporary foobar.cmd"якості нового вікна командного рядка "Title", і нічого не буде виконано в новому вікні командного рядка.)

Якщо ви хочете startдочекатися завершення пакетного файлу (після pauseвідхилення) перед його startзавершенням, вам потрібно додати /wперемикач до startкоманди:

start "" /w foobar.cmd

Ви можете зібрати це все в один рядок і навіть видалити (видалити) тимчасовий пакетний файл ( foobar.cmd):

echo netsh dump ^&^& pause ^&^& exit>foobar.cmd && start "" /w foobar.cmd && del foobar.cmd
  -or-
echo netsh dump ^& pause ^& exit>foobar.cmd & start "" /w foobar.cmd & del foobar.cmd

Зауважте, що якщо ви збираєтеся видалити тимчасовий пакетний файл, вам потрібно запустити startз /wкомутатором, інакше тимчасовий пакетний файл, ймовірно, буде видалений, перш ніж він матиме можливість запуститись.


Замість того, щоб видалити файл, /wможна було коротко поспати . timeout 2зробимо це, наприклад.
Антоніо

@ kevin-fegan навіщо потрібен тимчасовий файл cmd ???
maxxyme

0

Якщо ви хочете обернути першу команду символом if, але все-таки хочете, щоб друга команда виконувалася незалежно, тоді вам доведеться обернути if з cmd / c так само, як це:

cmd / c, якщо є abc. (rd / q abc) & echo привіт

Якщо ви не префіксуєте if з cmd / c, тоді вся команда стає частиною if (чого ви не хочете).


Або ви могли сказати(if exist abc. command₁) & command₂
Скотт

@Scott Я знаю, що компліменти є гріхом на цих веб-сайтах, але start "" cmd /c "(command₁) & (command₂)"законно не відповідають ніде в Інтернеті, але це єдиний спосіб пов'язати більшість пакетних заяв. З повагою до вас
Джон Кенс

1
Я ціную компліменти / поздоровлення, але я не розумію, що ви говорите. user138334 сказав: "У випадку, якщо ви хочете обернути першу команду символом, ifале все ж хочете, щоб друга команда виконувалася незалежно від цього, тоді вам доведеться також обернути ifце cmd /cсимволом", і я відповів, як це зробити без цього cmd /c. То чому ти кажеш, що єдиним способом зв’язувати більшість пакетних операцій є використання cmd /c? А чому ти кидаєш startу суміш?
Скотт

0

Так використовуйте &!

%command1% & %command2% виконує обидві команди

%command1% && %command2% запускає першу команду, якщо вона працювала, виконайте другу команду

%command1% || %command2% запускає першу команду, якщо це не вдалося виконати команду секунд

Дивіться тут


А також &, &&і ||насправді не є командою, це частина партії. Не команда.
KIRBY INHALES U

І %command%може виконати цей рядок як команду, яку бачимо тут
KIRBY INHALES U

-1

Я виявив, що за допомогою "START" виправлені декілька команд (я працюю в Windows 10 Home). Наприклад:

START chrome.exe "page.web.com" & timeout 20

Відповіді не повинні містити коментарів, як-от "Спасибі за це", це відволікає вас від вашого рішення. Вам слід подумати про редагування цієї відповіді, тому вона просто відповідає на питання з якомога більшою деталізацією, але без шуму (тобто команда, яка не працює)
Ramhound

Що він шукає, так і &не start!
NetwOrchestration

Яку проблему вирішує це? Що станеться при введенні командного рядка без start?
Скотт

-2

створити пакетний файл із коротким ім'ям, тобто bat.bat .

add cmd /c %1 
    cmd /c %2 
rem

і так далі до 9 рядків і економити

потім використовуйте його з подвійними лапками

bat "command one" "command two" "command three" 

cmd /c запустить кожну команду та закриє для наступного рядка, не кажучи, що це краще, ніж &&, тільки що це легко.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.