Windows komut satırında 1 satır ile birden çok komut yürütmek?


65

Windows komut satırında birden fazla komutu tek bir satırla nasıl yürütebilirim?

Mesela bir SVN güncellemesi yapmak istediğimi ve ardından tüm dosyaları başka bir yere kopyaladığımı söyle.

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

Bu açıkça işe yaramadı. ';' Gibi bir karakter veya sınırlayıcı var mı? böyle bir şey yapmak için?

Yanıtlar:


105

Evet var. Bu &.

&& 1. komut tamamlandığında, başarısız olmadıkça 2. komutu uygulayacaktır.

& ne olursa olsun yürütecek.


7
&ve &&sadece Windows'da çalışır cmd.exe- bu DOS değildir .
Grawity

22
Bir terim olarak 'DOS' genellikle cmd'yi tanımlamak için kullanılır ve op'un svn'yi kullandığını görünce hala DOS kullandığından şüpheliyim.
Pedantik

Orada: urlencode.blogspot.com/2009/06/vista-desktop-june-09.html O Windows XP kullanıyor. Kesinlikle DOS değil (hiç bu kadar iyi
görünmedi

8
Herhangi biri "DOS" deyince, gerçekten "Windows Komut İstemi" anlamına geldiğini varsaymak güvenli olduğunu düşünüyorum. Burada bir uzaya çıkacağım ve çoğu insanın bugünlerde DOS kullanmadığını söyleyeceğim. Düzeltme için teşekkürler - bu gün ve çağda sadece biraz gereksiz.
Murdoch Ripper,

@MurdochRipper Ne demek istiyorsun? Şu an DOS'ta bu soruyu görüntülüyorum. ;)
Andrew,

4

En azından MS-DOS 6.22'de bir çeşit paragraf sembolü almak için Ctrl+ tuşunu kullandım T. Bu aynı &Phoshi'nin bahsettiği gibi çalıştı . Ancak bu, doskey.exe çalışıyorsa çalışacaktır.


4

1 satır ile birden fazla komut çalıştırmak istiyorsanız, komutları başlattığınız yer, startörneğin, böyle bir komutu çalıştırmak istiyorsanız:

start "" netsh dump && pause

Ardından, 2 adımda yapmanız gerekir (tek satırlık çözüm bu cevabın sonundadır).

İlk önce komutları geçici bir toplu iş dosyasına yazın (bu durumda &ya da kullanabilirsiniz &&):

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

"&"sKomutta "^" sıradan karakterler olarak ele alınmalarını sağlamak için (ve işaretlerinin) her birinden "kaçış" yapmanız gerektiğini unutmayın echo. Alternatif olarak, geçici toplu iş dosyasını Not Defteri gibi bir metin düzenleyicisiyle oluşturabilirsiniz.

Sonra starttoplu iş dosyasını başlatmak için kullanın :

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


Not: Boş çift tırnak işareti çifti "Title", açılan komut penceresinin başlık çubuğunda gösterilecek olan içindir start. Bu "Title"argüman teknik olarak isteğe bağlı bir argümandır start, ancak çalışacak komut çift ​​alıntı ise , gerçekte gereklidirstart . Örneğin, ikinci örnekte:

start "" "temporary foobar.cmd"

boş çift alıntı işaretini böyle bırakırsanız:

start "temporary foobar.cmd"

Daha sonra startyeni bir komut penceresi açın ve kullanacağı "temporary foobar.cmd"yeni komut penceresi olarak "Title"ve hiçbir şey yeni komuta penceresinde çalıştırılacaktır.)

startToplu iş dosyasının tamamlanmasını beklemek istiyorsanız ( pausegörevden alındıktan sonra ), starttamamlanmadan önce , /wanahtarı startkomuta eklemeniz gerekir :

start "" /w foobar.cmd

Bunları bir satırda bir araya getirebilir ve geçici toplu iş dosyasını ( foobar.cmd) kaldırabilir (hatta ):

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

Geçici toplu iş dosyasını silecekseniz start, /wanahtarla birlikte çalışmanız gerekeceğini unutmayın , aksi takdirde geçici toplu iş dosyası çalıştırma şansı olmadan önce silinir.


/wBiri yerine dosyayı silmeden önce kısa bir uyku koyabilir . timeout 2Örneğin, yapacağım.
Antonio,

@ kevin-fegan neden geçici bir cmd dosyasına ihtiyacınız var ???
maxxyme

0

İlk komutu bir if ile sarmak istediğinizde ancak yine de ikinci komutun ne olursa olsun çalışmasını istiyorsanız, o zaman if'in bir cmd / c ile sarılması gerekir:

abc varsa cmd / c. (rd / q abc) & merhaba yankı

Eğer if önekini cmd / c ile koymazsanız, komutun tamamı if'nin bir parçası haline gelir (ki istemeyebilirsiniz).


Ya da söyleyebilirsin(if exist abc. command₁) & command₂
Scott

@Scott, iltifatların bu sitelerdeki bir günah olduğunu biliyorum, ancak start "" cmd /c "(command₁) & (command₂)"okunaklı olarak web üzerinde hiçbir yerde yanıtlanmadı , ancak çoğu toplu ifadeyi birbirine bağlamanın tek yoludur. Tebrikler.
John Kens,

1
Tebrikler / tebrikler için teşekkür ederim, ama ne dediğini anlamıyorum. user138334, “İlk komutu bir ile sarmak istediğinizde, ifancak ikinci komutun ne olursa olsun yürütülmesini istiyorsanız, aynı zamanda ifbir cmd /cde sararmanız gerekir” dedi ve ben de olmadan yapmanın bir yolunu yanıtladım cmd /c. Öyleyse neden toplu ifadeleri bağlamanın tek yolunun kullanıldığını söylüyorsunuz cmd /c? Ve neden startkarışıma atıyorsun?
Scott,

0

Evet kullanın &!

%command1% & %command2% her iki komutu da çalıştırır

%command1% && %command2% birinci komutu çalıştırır, eğer işe yaradıysa ikinci komutu çalıştırır

%command1% || %command2% ilk komutu çalıştırır, eğer başarısız olursa saniye komutunu çalıştır

Buraya bak


Ve ayrıca &, &&ve ||aslında bir komut değil, partinin bir parçası. Komut değil.
KIRBY INHALES U

Ve %command%bu dizgiyi komut olarak çalıştırabilir, burada
KIRBY INHALES U

-1

'START' kullanarak birden çok komutun çalıştığını gördüm (Windows 10 Home'u çalıştırıyorum). Örneğin:

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

Yanıtlar, "Bunun için teşekkürler" gibi yorum içermemelidir, sizin çözümünüzden rahatsız edicidir. Bu cevabı düzenlemeyi düşünmelisiniz, bu nedenle soruyu basitçe, çok fazla ayrıntı ile ama gürültüsüz (yani çalışmayan komut)
cevaplar

Aradığı şey &, değil start!
NetwOrchestration

Bu hangi sorunu çözer? Komut satırını yazmadan ne olur start?
Scott,

-2

bat.bat gibi kısa bir isimle bir toplu iş dosyası oluşturun .

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

ve böylece 9 satır ve kaydet

sonra çift tırnakla kullanın

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

cmd /c Her komutu çalıştıracak ve bir sonraki satır için kapanacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.