Jak uruchomić dwa polecenia w jednej linii w CMD systemu Windows?

Chcę uruchomić dwa polecenia w konsoli CMD Windows.

W Linuksie zrobiłbym to tak

touch thisfile ; ls -lstrh

Jak to się robi w Windows?

Author: Soviut, 2011-11-08

16 answers

Jak to na wszystkich osach Microsoftu od 2000 roku, i nadal dobre dzisiaj:

dir & echo foo

Jeśli chcesz, aby drugie polecenie Wykonało się tylko wtedy, gdy pierwsze zakończyło się pomyślnie:

dir && echo foo

Składnia single ampersand (&) do wykonywania wielu poleceń w jednej linii pochodzi z Windows XP, Windows 2000 i niektórych wcześniejszych wersji NT. (Przynajmniej 4.0, według jednego z komentatorów tutaj.)

Jest sporo innych punktów na ten temat, które znajdziesz przewijając w dół strona.

Dane historyczne są następujące, dla tych, którzy mogą je uznać za edukacyjne.

Wcześniej składnia & & była tylko funkcją zastępczą powłoki 4DOS, zanim ta funkcja została dodana do interpretera poleceń Microsoft.

W Windows 95, 98 I ME, zamiast tego używałbyś znaku rury:

dir | echo foo

W MS-DOS 5.0 i późniejszych, w niektórych wcześniejszych wersjach Windows i NT interpretera poleceń, (nieudokumentowanym) separatorem poleceń był znak 20 (Ctrl+T), który Będę reprezentować ^T tutaj.

dir ^T echo foo
 889
Author: djdanlib,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-24 02:02:45

Cytat z dokumentacji:

używanie wielu poleceń i symboli przetwarzania warunkowego

Możesz uruchomić wiele poleceń z jednego wiersza poleceń lub skryptu za pomocą symboli przetwarzania warunkowego. Po uruchomieniu wielu poleceń z symbolami przetwarzania warunkowego, polecenia po prawej stronie symbol przetwarzania warunkowego działa na podstawie wyników polecenia po lewej stronie symbolu przetwarzania warunkowego.

Na przykład, możesz chcieć uruchomić polecenie tylko wtedy, gdy poprzednie polecenie nie powiedzie się. Możesz też uruchomić polecenie tylko wtedy, gdy poprzednie polecenie powiedzie się.

Możesz użyć znaków specjalnych wymienionych w poniższej tabeli, aby przekazać wiele poleceń.

  • & [...]
    command1 & command2
    Użyj do oddzielenia wielu poleceń w jednym wierszu poleceń. Cmd.exe uruchamia pierwsze polecenie, a następnie drugie polecenie.

  • && [...]
    command1 && command2
    Użyj do uruchomienia polecenia następującego po & & tylko wtedy, gdy polecenie poprzedzające symbol powiedzie się. Cmd.exe uruchamia pierwsze polecenie, a następnie uruchamia drugie polecenie tylko wtedy, gdy pierwsze polecenie zakończyło się pomyślnie.

  • || [...]
    command1 || command2
    Użyj do uruchomienia polecenia następującego po / / tylko jeśli polecenie poprzedzające / / nie powiedzie się. Cmd.exe uruchamia pierwszy polecenie, a następnie uruchamia drugie polecenie tylko wtedy, gdy pierwsze polecenie nie zakończyło się pomyślnie(otrzymuje kod błędu większy niż zero).

  • ( ) [...]
    (command1 & command2)
    Użyj do grupowania lub zagnieżdżania wielu poleceń.

  • ; or ,
    command1 parameter1;parameter2
    Służy do oddzielania parametrów poleceń.

 499
Author: Raihan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-21 11:38:45

& jest odpowiednikiem Bash dla ; (Uruchom polecenia) i {[2] } jest odpowiednikiem Bash dla && (Uruchom polecenia tylko wtedy, gdy poprzednie nie spowodowało błędu).

 63
Author: manojlds,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-15 17:09:16

Możesz używać & do uruchamiania poleceń jeden po drugim. Przykład: c:\dir & vim myFile.txt

 23
Author: scrappedcola,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-08 18:34:44

Jeśli chcesz utworzyć skrót cmd (na przykład na pulpicie) Dodaj parametr / k (/K oznacza keep, / c zamknie okno):

cmd /k echo hello && cd c:\ && cd Windows
 16
Author: TroodoN-Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-12 06:39:22

Możesz użyć wywołania , aby rozwiązać problem zbyt szybkiego oceniania zmiennych środowiskowych - np.

set A=Hello & call echo %A%
 11
Author: SSi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-13 11:14:06

cmd /c ipconfig /all & Output.txt

To polecenie wykonuje polecenie i otwiera Output.txt plik w jednym poleceniu

 5
Author: dpp.2325,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-17 00:44:04

Próbowałem więc włączyć konkretne zadanie uruchomienia RegAsm (register assembly) z menu kontekstowego. Problem, który miałem było to, że wynik będzie migać i odejść, zanim będę mógł przeczytać. Więc próbowałem przekierować do Pause, które nie działa, gdy Komenda zawiedzie (jak wspomniano tutaj Komenda Pause nie działa .skrypt bat i tutaj polecenie pliku wsadowego pauza nie działa ). Więc próbowałem cmd /k, ale to pozostawia okno otwarte na więcej poleceń (chcę tylko przeczytać wynik). Dodałem więc pause, a następnie exit do łańcucha, w wyniku czego otrzymałem:

cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit

To działa jak urok -- RegAsm uruchamia plik i pokazuje jego wyniki ,a następnie " naciśnij dowolny klawisz, aby kontynuować..."jest wyświetlany wiersz polecenia, a następnie okno wiersza polecenia zamyka się po naciśnięciu klawisza.

P. S. dla innych, którzy mogą być zainteresowani, możesz użyć następujących .wpisy do pliku reg aby dodać skojarzenie pliku dllfile do .plików dll, a następnie rozszerzenie polecenia RegAsm do tego (zwróć uwagę na unikalne cudzysłowy i odwrotne ukośniki):

[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"

Teraz mam ładne menu prawym przyciskiem myszy, aby zarejestrować zespół.

 5
Author: SNAFUBAR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:33

Liczba symboli przetwarzania może być używana podczas uruchamiania kilku poleceń w tej samej linii i może prowadzić do przetwarzania przekierowań w niektórych przypadkach, zmieniając wyjście w innym przypadku lub po prostu nie. Jednym z ważnych przypadków jest umieszczanie na tej samej linii poleceń, które manipulują zmiennymi.

@echo off
setlocal enabledelayedexpansion
set count=0
set "count=1" & echo %count% !count!

0 1

Jak widać w powyższym przykładzie, gdy polecenia używające zmiennych są umieszczone w tej samej linii, musisz użyć opóźnionego rozszerzenia, aby zaktualizować wartości zmiennych. Jeśli twoja zmienna jest indeksowana, użyj Wywołanie polecenia z modyfikatorami%%, aby zaktualizować jego wartość w tej samej linii:

set "i=5" & set "arg!i!=MyFile!i!" & call echo path!i!=%temp%\%%arg!i!%%

path5=C:\Users\UserName\AppData\Local\Temp\MyFile5
 5
Author: sambul35,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-23 05:36:21

Aby wykonać dwa polecenia w tym samym czasie, musisz umieścić symbol & (ampersand) pomiędzy tymi dwoma poleceniami. Tak:

color 0a & start chrome.exe
Zdrówko!
 3
Author: PryroTech,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-13 04:41:56

Staram się mieć dwa pingi w tym samym oknie i jest to polecenie szeregowe w tej samej linii. Po zakończeniu pierwszego, Uruchom drugie polecenie.

Rozwiązaniem było połączenie z start /b w wierszu polecenia systemu Windows 7.

Uruchom jak zwykle, bez /b i uruchom w osobnym oknie.

Komenda użyta do uruchomienia w tej samej linii to:

start /b command1 parameters & command2 parameters

W jakikolwiek sposób, jeśli chcesz przetworzyć wyjście, nie polecam tego używać. Zauważyłem, że wyjście jest zakodowane pomiędzy wyjście poleceń.

 3
Author: sdcxp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-15 17:13:56

Cóż, masz dwie opcje: Orurowanie, albo po prostu &:

DIR /S & START FILE.TXT

Lub

tasklist | find "notepad.exe"

Piping (|) służy raczej do pobierania danych wyjściowych z jednego polecenia i umieszczania go w innym. And (&) is just saying run this, and that.

 3
Author: PyDever,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-15 17:14:58

Nie, cd / && tree && echo %time%. Czas wykonania pierwszego polecenia.

Orurowanie ma pewien problem, ale nie jest krytyczne, dopóki ludzie wiedzą, jak to działa.

 1
Author: notarealname,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-15 17:11:05

To proste: po prostu różnicuj je znakami&&. Przykład:

echo Hello World && echo GoodBye World

Goodbye World zostanie wydrukowane po Hello World.

 0
Author: Rajan Dhanowa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-05 15:06:44

Jeszcze jeden przykład: na przykład, gdy używamy gulp build system, zamiast

gulp - default > build

gulp build - build build-folder

gulp watch - plik startowy-watch

gulp dist - zbuduj dist-folder

Możemy to zrobić za pomocą jednej linii:

cd c:\xampp\htdocs\project & gulp & gulp watch
 0
Author: Mile Mijatovic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-15 17:16:00

Kiedy próbujesz używać lub manipulować zmiennymi w jednej linii, uważaj na ich zawartość! Np. zmienna podobna do następującej

PATH=C:\Program Files (x86)\somewhere;"C:\Company\Cool Tool";%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;

Może prowadzić do wielu problemów, jeśli używasz go jako %PATH%

  1. nawias zamykający kończy wypowiedź grupy
  2. podwójne cudzysłowy nie pozwalają na użycie %PATH% do obsługi problemu nawiasów
  3. a co będzie zawierać zmienna referowana, taka jak %USERPROFILE%?
 0
Author: V15I0N,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-23 10:19:27