it-swarm-eu.dev

Jak spustím dva příkazy v jednom řádku v systému Windows CMD?

Chci spustit dva příkazy v konzole Windows CMD.

V Linuxu bych to udělal takhle

touch thisfile ; ls -lstrh

Jak se to provádí v systému Windows?

740
flybywire

To se líbí na všech operačních systémech Microsoftu od roku 2000 a dnes je stále dobré:

dir & echo foo

Chcete-li, aby se druhý příkaz provedl pouze v případě, že první příkaz byl úspěšně ukončen:

dir && echo foo

Jediná ampersand (&) syntaxe pro provádění více příkazů na jednom řádku se vrací do Windows XP, Windows 2000 a některých starších verzí NT. (Minimálně 4,0, podle jednoho komentáře.)

Existuje několik dalších bodů o tom, že se na této stránce můžete pohybovat dolů.

Následují historická data pro ty, kteří ji mohou považovat za vzdělávací.

Předtím, & & syntaxe byla jen vlastnost Shell nahrazení 4DOS dříve, než tato funkce byla přidána k interpretu příkazu Microsoft.

Ve Windows 95, 98 a ME byste místo toho použili znak kanálu:

dir | echo foo

V MS-DOS 5.0 a novějším, přes některé starší verze Windows a NT příkazového interpreteru, byl oddělovač příkazů (undocumented) znak 20 (Ctrl + T), který zde reprezentuji ^ T zde.

dir ^T echo foo
1005
djdanlib

Citace z dokumentace:

Použití více příkazů a symbolů podmíněného zpracování

Můžete spouštět více příkazů z jednoho příkazového řádku nebo skriptu pomocí symbolů podmíněného zpracování. Když spustíte více příkazů se symboly podmíněného zpracování, příkazy napravo od symbolu podmíněného zpracování působí na základě výsledků příkazu vlevo od symbolu podmíněného zpracování. 

Můžete například chtít spustit příkaz pouze v případě, že předchozí příkaz selže. Nebo můžete chtít spustit příkaz pouze v případě, že předchozí příkaz je úspěšný.

Pro předání více příkazů můžete použít speciální znaky uvedené v následující tabulce.

  • & [...]
    command1 & command2
    Slouží k oddělení více příkazů na jednom příkazovém řádku. Cmd.exe spustí první příkaz a potom druhý příkaz.

  • && [...]
    command1 && command2
    Použijte pro spuštění příkazu po && pouze v případě, že příkaz předcházející symbolu je úspěšný. Cmd.exe spustí první příkaz a pak spustí druhý příkaz pouze v případě, že první příkaz byl úspěšně dokončen. 

  • || [...]
    command1 || command2
    Použijte pro spuštění příkazu po || pouze pokud příkaz předcházející || nezdaří. Cmd.exe spustí první příkaz a potom spustí druhý příkaz pouze v případě, že první příkaz nebyl úspěšně dokončen (obdrží kód chyby větší než nula).

  • ( ) [...]
    (command1 & command2)
    Slouží k seskupení nebo vnoření více příkazů.

  • ; or ,
    command1 parameter1;parameter2
    Slouží k oddělení parametrů příkazů.

519
Raihan

& je ekvivalent Bash pro ; (příkazy run) a && je ekvivalentem Bash && (spouštět příkazy pouze v případě, že předchozí nezpůsobil chybu).

65
manojlds

Příkazy můžete spouštět po jednom. Příklad: c:\dir & vim myFile.txt

23
scrappedcola

Pokud chcete vytvořit zkratku cmd (například na ploše), přidejte parametr/k (/ k znamená ponechat,/c zavře okno):

cmd /k echo hello && cd c:\ && cd Windows
16
TroodoN-Mike

Můžete použít call k překonání problému proměnných prostředí, které jsou vyhodnocovány příliš brzy - např.

set A=Hello & call echo %A%
11
SSi

Množství zpracovatelských symbolů může být používáno když provozuje několik příkazů na stejné lince, a smět vést k přesměrování zpracování v některých případech, měnit výstup v jiném případě, nebo jen selhat. Jeden důležitý případ je umístění na stejných příkazech linky, které manipulují s proměnnými.

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

0 1

Jak vidíte ve výše uvedeném příkladu, když příkazy používající proměnné jsou umístěny na stejném řádku, musíte použít zpožděnou expanzi pro aktualizaci hodnot proměnné. Pokud je vaše proměnná indexována, použijte příkaz CALL s modifikátory %% k aktualizaci její hodnoty na stejném řádku:

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

path5=C:\Users\UserName\AppData\Local\Temp\MyFile5
6
sambul35

Snažil jsem se tedy povolit specifický úkol spuštění RegAsm (register Assembly) z kontextového menu. Problém, který jsem měl, byl ten, že výsledek bude blikat a odejde, než si to můžu přečíst. Tak jsem zkusil piping na Pause, což nefunguje, když příkaz selže (jak je uvedeno zde Příkaz Pause nefunguje ve skriptu .bat a zde Příkaz dávkového souboru PAUSE nefunguje ). Tak jsem se snažil cmd /k, ale to ponechá okno otevřené pro více příkazů (chci jen přečíst výsledek). Přidal jsem tedy pause následovaný exit do řetězce, což má za následek následující:

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

To funguje jako kouzlo - RegAsm běží na souboru a zobrazuje jeho výsledky, poté se zobrazí "Stiskněte libovolnou klávesu pro pokračování ..." Zobrazí se výzva, pak se po stisknutí klávesy zavře okno příkazového řádku.

P.S. Pro ostatní, kteří by mohli mít zájem, můžete použít následující položky souboru REG pro přidání přidružení dllfile k souborům DLL a potom k rozšíření příkazu RegAsm (všimněte si uvozovek a zpětných lomítek):

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

Nyní mám Nice menu pravým tlačítkem myši k registraci shromáždění.

5
SNAFUBAR

cmd /c ipconfig /all & Output.txt

Tento příkaz spustí příkaz a otevře soubor Output.txt v jediném příkazu

5
dpp.2325

Chcete-li provést dva příkazy najednou, musíte mezi tyto dva příkazy umístit symbol & (ampersand). Jako tak:

color 0a & start chrome.exe

Na zdraví!

3
PryroTech

Snažím se mít ve stejném okně dva pingy a je to sériový příkaz na stejném řádku. Po dokončení prvního příkazu spusťte druhý příkaz.

Řešení bylo kombinovat s start /b na příkazovém řádku Windows 7.

Začněte jako obvykle, bez /b a spusťte v samostatném okně.

Příkaz používaný ke spuštění ve stejném řádku je:

start /b command1 parameters & command2 parameters

V žádném případě, pokud chcete analyzovat výstup, nedoporučuji použít tento. Všiml jsem si, že výstup je šifrován mezi výstupem příkazů.

3
sdcxp

Máte dvě možnosti: Piping, nebo &:

DIR /S & START FILE.TXT

Nebo,

tasklist | find "notepad.exe"

Piping (|) je více pro převzetí výstupu jednoho příkazu a jeho vložení do jiného. A (&) právě říká, že to běží, a to. 

3
PyDever

Ne, cd / && tree && echo %time%. Čas odezvy je v okamžiku, kdy je proveden první příkaz.

Potrubí má nějaký problém, ale není důležité, pokud lidé vědí, jak to funguje.

1
notarealname

Při pokusu o použití nebo manipulaci s proměnnými v jednom řádku dávejte pozor na jejich obsah! Např. proměnnou, jako je následující

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

může vést k mnoha problémům, pokud je používáte jako %PATH%

  1. Uzavírací závorky ukončují vaše skupinové prohlášení
  2. Dvojité uvozovky vám neumožňují použít %PATH% pro zpracování problému s závorkami
  3. A co bude obsahovat odkazovaná proměnná jako %USERPROFILE%?
0
V15I0N

Další příklad: Například když používáme systém sestavení gulp namísto

gulp - výchozí> build

gulp build - build build-folder

gulp watch - spusťte sledování souborů

gulp dist - sestavení dist-složky

Můžeme to udělat jedním řádkem:

cd c:\xampp\htdocs\project & gulp & gulp watch
0
Mile Mijatovic

Ano, tam je. To je &.

&& provede příkaz 2, když je příkaz 1 dokončen za předpokladu, že selhal.

& bude vykonávat bez ohledu na to.

Je to jednoduché: prostě je rozlišujte pomocí značek &&. Příklad: 

echo Hello World && echo GoodBye World

Sbohem Svět bude vytištěn po Hello World.

0
Rajan Dhanowa