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?

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.


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.


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.


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ć).


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


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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.