Wykonać wiele poleceń z 1 linią w linii poleceń Windows?

65

Jak mogę wykonać wiele poleceń w linii poleceń Windows za pomocą tylko jednego wiersza?

Powiedzmy na przykład, że chcę wykonać aktualizację SVN, a następnie skopiować wszystkie pliki w inne miejsce ...

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

To oczywiście nie działa. Czy istnieje znak lub separator podobny do „;” wykonać coś takiego?

T. Stone
źródło

Odpowiedzi:

105

Tak jest. Jest &.

&& wykona polecenie 2 po zakończeniu polecenia 1, pod warunkiem, że nie zakończyło się ono niepowodzeniem.

& wykona się niezależnie.

Phoshi
źródło
7
&i &&działa tylko w systemie Windows ” cmd.exe- który nie jest systemem DOS.
grawity
22
„DOS” jako termin jest często używany do opisania cmd, a widząc, jak op używa svn, bardzo wątpię, że nadal używa DOS. Nie musisz być pedantyczny :)
Phoshi
Tam: urlencode.blogspot.com/2009/06/vista-desktop-june-09.html Używa systemu Windows XP. Na pewno nie DOS (nigdy nie wyglądało tak dobrze;))
Phoshi
8
Myślę, że można bezpiecznie założyć, że kiedy ktoś wspomina o „DOS”, naprawdę oznacza „Wiersz polecenia systemu Windows”. Mam zamiar wyjść tutaj na całość i powiedzieć, że większość ludzi prawdopodobnie ostatnio nie używa DOS-a. Dzięki za korektę - w dzisiejszych czasach jest to trochę niepotrzebne.
Murdoch Ripper
@MurdochRipper Co masz na myśli? W tej chwili przeglądam to pytanie w systemie DOS. ;)
Andrew
4

Przynajmniej w MS-DOS 6.22 użyłem klawisza Ctrl+, Taby uzyskać rodzaj symbolu akapitu. &Działa to tak jak wspomniany przez Phoshi. Działa to jednak tylko wtedy, gdy masz doskey.exe.

Torben Gundtofte-Bruun
źródło
4

Jeśli chcesz wykonać wiele poleceń z 1 linią, gdzie je uruchamiasz start, na przykład, jeśli chcesz wykonać takie polecenie:

start "" netsh dump && pause

Następnie musisz to zrobić w 2 krokach (rozwiązanie na jednej linii znajduje się na końcu tej odpowiedzi).

Najpierw napisz polecenia do tymczasowego pliku wsadowego (w tym przypadku możesz użyć &lub &&):

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

Zauważ, że musisz „uciec” każdego z "&"s(ampersands) za pomocą, "^" aby umożliwić traktowanie ich jako zwykłych znaków w echopoleceniu. Alternatywnie możesz utworzyć tymczasowy plik wsadowy za pomocą edytora tekstu, takiego jak Notatnik.

Następnie użyj, startaby uruchomić plik wsadowy:

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


Uwaga: Pusta para podwójnych cudzysłowów dotyczy znaków, "Title"które zostaną wyświetlone na pasku tytułowym okna poleceń, które startzostanie otwarte. "Title"Argument ten jest technicznie opcjonalnym argumentem start, ale jest faktycznie wymagany , jeśli polecenie, które startzostanie uruchomione, jest cudzysłowione. Na przykład w drugim przykładzie:

start "" "temporary foobar.cmd"

jeśli pominiesz pustą parę podwójnych znaków cudzysłowu:

start "temporary foobar.cmd"

następnie startotworzy nowe okno poleceń i użyje go "temporary foobar.cmd"jako nowe okno poleceń "Title", a nic nie zostanie wykonane w nowym oknie poleceń).

Jeśli chcesz startpoczekać na zakończenie pliku wsadowego (po jego pauseodrzuceniu), zanim startzakończy się, musisz dodać /wprzełącznik do startpolecenia:

start "" /w foobar.cmd

Możesz połączyć to wszystko w jednym wierszu, a nawet usunąć (usunąć) tymczasowy plik wsadowy ( 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

Pamiętaj, że jeśli zamierzasz usunąć tymczasowy plik wsadowy, musisz uruchomić go startza pomocą /wprzełącznika, w przeciwnym razie tymczasowy plik wsadowy zostanie prawdopodobnie usunięty, zanim będzie miał szansę na uruchomienie.

Kevin Fegan
źródło
Zamiast tego /wmożna położyć krótki sen przed usunięciem pliku. timeout 2zrobi to na przykład.
Antonio
@ kevin-fegan dlaczego potrzebujesz tymczasowego pliku cmd ???
maxxyme
0

Jeśli chcesz owinąć pierwsze polecenie if, ale nadal chcesz, aby drugie polecenie zostało wykonane niezależnie od tego, wtedy musisz owinąć if za pomocą cmd / c, a także w ten sposób:

cmd / c, jeśli istnieją abc. (rd / q abc) i echo witaj

Jeśli nie użyjesz if z cmd / c, całe polecenie stanie się częścią if (czego możesz nie chcieć).


źródło
Lub można powiedzieć(if exist abc. command₁) & command₂
Scott,
@Scott Wiem, że komplementy są grzechem na tych stronach, ale start "" cmd /c "(command₁) & (command₂)"nie ma na nie odpowiedzi w żadnym miejscu w sieci, ale jest to jedyny sposób na połączenie większości instrukcji wsadowych. Gratulacje dla ciebie.
John Kens,
1
Doceniam komplementy / gratulacje, ale nie rozumiem, co mówisz. user138334 powiedział: „W przypadku, gdy chcesz zawinąć pierwsze polecenie ze związkiem if, ale nadal jak drugiego polecenia do wykonania niezależnie potem to trzeba owinąć ifz cmd /ctak dobrze”, a ja odpowiedziałem w sposób robi to bez cmd /c. Dlaczego więc mówisz, że jedynym sposobem na połączenie większości instrukcji wsadowych jest użycie cmd /c? I dlaczego rzucasz startsię w miks?
Scott
0

Tak, użyj &!

%command1% & %command2% uruchamia oba polecenia

%command1% && %command2% uruchamia pierwsze polecenie, jeśli to zadziałało, uruchom drugie polecenie

%command1% || %command2% uruchamia pierwsze polecenie, jeśli to się nie powiedzie, uruchom polecenie sekundy

Zobacz tutaj

KIRBY INHALES U
źródło
A także &, &&i ||tak naprawdę nie są poleceniem, to część partii. To nie jest polecenie.
KIRBY INHALES U
I %command%może wykonać ten ciąg jako polecenie, widoczne tutaj
KIRBY INHALES U
-1

Odkryłem, że użycie „START” naprawiło działanie wielu poleceń (korzystam z systemu Windows 10 Home). Na przykład:

START chrome.exe "page.web.com" & timeout 20
bazzakay
źródło
Odpowiedzi nie powinny zawierać komentarzy, takich jak „Dzięki za to”, odwracają uwagę od twojego rozwiązania. Powinieneś rozważyć edycję tej odpowiedzi, więc po prostu odpowiada na pytanie, z taką
samą
Czego szuka &, nie jest start!
NetwOrchestration,
Jaki problem to rozwiązuje? Co się stanie, gdy wpiszesz wiersz poleceń bez start?
Scott
-2

utwórz plik wsadowy o krótkiej nazwie, np . bat.bat .

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

i tak dalej do 9 linii i oszczędzaj

następnie użyj go z podwójnymi cudzysłowami

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

cmd /c uruchomi każde polecenie i zamknie się w następnym wierszu, nie mówiąc, że jest to lepsze niż && tylko dlatego, że jest łatwe.

kok
źródło