Windows CMD konsolunda iki komut çalıştırmak istiyorum.
Linux'ta böyle yapardım
touch thisfile ; ls -lstrh
Windows'da nasıl yapılır?
Windows CMD konsolunda iki komut çalıştırmak istiyorum.
Linux'ta böyle yapardım
touch thisfile ; ls -lstrh
Windows'da nasıl yapılır?
Yanıtlar:
2000 yılından bu yana tüm Microsoft işletim sistemlerinde böyle ve bugün hala iyi:
dir & echo foo
İkinci komutun yalnızca ilk başarılı bir şekilde çıkılması durumunda yürütülmesini istiyorsanız:
dir && echo foo
Bir satırda birden çok komut yürütmek için tek ve (ve) sözdizimi Windows XP, Windows 2000 ve önceki bazı NT sürümlerine geri döner. (En az 4.0, burada bir yorumcuya göre.)
Bununla ilgili olarak, bu sayfayı aşağı kaydırırken bulacağınız birkaç nokta daha var.
Bunu eğitimsel bulabilenler için geçmiş veriler izler.
Bundan önce && sözdizimi, Microsoft komut yorumlayıcısına eklenmeden önce 4DOS kabuk değiştirme işleminin yalnızca bir özelliğiydi.
Windows 95, 98 ve ME'de bunun yerine dikey çizgi karakterini kullanırsınız:
dir | echo foo
MS-DOS 5.0 ve sonraki sürümlerde, komut yorumlayıcısının önceki bazı Windows ve NT sürümlerinde, (belgesiz) komut ayırıcı, burada ^ T ile temsil edeceğim karakter 20 (Ctrl + T) idi.
dir ^T echo foo
Belgelerden bir alıntı:
Birden fazla komut ve koşullu işleme sembolü kullanma
Koşullu işleme sembollerini kullanarak tek bir komut satırından veya komut dosyasından birden fazla komut çalıştırabilirsiniz. Koşullu işlem sembolleriyle birden çok komut çalıştırdığınızda, koşullu işlem sembolünün sağındaki komutlar, koşullu işlem sembolünün solundaki komutun sonuçlarına göre çalışır.
Örneğin, bir komutu yalnızca önceki komut başarısız olduğunda çalıştırmak isteyebilirsiniz. Veya, yalnızca önceki komut başarılı olduğunda bir komut çalıştırmak isteyebilirsiniz.
Birden fazla komut iletmek için aşağıdaki tabloda listelenen özel karakterleri kullanabilirsiniz.
& [...]
command1 & command2
Bir komut satırında birden çok komutu ayırmak için kullanın. Cmd.exe önce ilk komutu sonra da ikinci komutu çalıştırır.
&& [...]
command1 && command2
&& komutunu izleyen komutu yalnızca sembolün önündeki komut başarılı olduğunda çalıştırmak için kullanın. Cmd.exe ilk komutu çalıştırır ve sonra yalnızca ilk komut başarıyla tamamlandığında ikinci komutu çalıştırır.
|| [...]
command1 || command2
Aşağıdaki komutu çalıştırmak için kullanın || sadece önceki komut || başarısız olur. Cmd.exe ilk komutu çalıştırır ve sonra yalnızca ilk komut başarıyla tamamlanmadıysa (sıfırdan büyük bir hata kodu alırsa) ikinci komutu çalıştırır.
( ) [...]
(command1 & command2)
Birden çok komutu gruplamak veya iç içe yerleştirmek için kullanın.
; or ,
command1 parameter1;parameter2
Komut parametrelerini ayırmak için kullanın.
cmd /c "echo foo & echo bar"
.
vagrant up && vagrant ssh
Windows 10'da tırnak işaretleri olmadan çalıştı
&
- onu asenkron hale getiriyor ve her ikisini de paralel olarak çalıştırıyor. Ben ile kullanıyordum çünkü &&
senkron oldu ve sadece ilk başarılı olursa devam ediyor!
&
komutları eşzamansız veya paralel yapmaz. tamamlandıktan sonracommand1 & command2
çalışır . Başarısı veya başarısızlığı önemsizdir. command2
command1
command1
&
Bash eşdeğeri ;
(run komutları) ve &&
Bash eşdeğeri &&
(run komutları yalnızca önceki hataya neden olmadığında).
;
Linux'ta görmedim
;
, ilk komutu çalıştırmak, bitmesini beklemek, sonra ikinci komutu çalıştırmak anlamına gelir. &
ilk komutu çalıştırmak, arka plana koymak ve ikinci komutu çalıştırmak anlamına gelir. Böylece her iki program aynı anda başlatılır. Bunların sembolleri birleştirmediğini, bunların ilk komuta ait semboller olduğunu unutmayın; progname &
ikinci bir komuta sahip olmadan arka planda tek bir komut başlatabilirsiniz .
Komutları art arda çalıştırmak için & tuşunu kullanabilirsiniz. Misal:c:\dir & vim myFile.txt
Bir cmd kısayolu oluşturmak istiyorsanız (örneğin masaüstünüzde) / k parametresini ekleyin (/ k keep anlamına gelir, / c pencereyi kapatır):
cmd /k echo hello && cd c:\ && cd Windows
Çok yakında değerlendirilen ortam değişkenleri sorununun üstesinden gelmek için çağrıyı kullanabilirsiniz - ör.
set A=Hello & call echo %A%
echo
yazdırmaz, eski değeri yazdırır . En azından, Windows 7 kutumda gözlemlediğim şey bu.
setlocal EnableDelayedExpansion
bir komut dosyasında veya cmd /v
) kullanmaktır. Örneğin: timeout 5 && cmd /v /c echo !TIME! && echo %TIME%
.
Aynı satırda birden fazla komut çalıştırılırken bir dizi işlem sembolü kullanılabilir ve bazı durumlarda işlem yeniden yönlendirmeye, başka bir durumda çıktıyı değiştirmeye veya başarısız olmasına neden olabilir. Önemli bir durum, değişkenleri işleyen aynı satır komutlarına yerleştirmektir.
@echo off
setlocal enabledelayedexpansion
set count=0
set "count=1" & echo %count% !count!
0 1
Yukarıdaki örnekte gördüğünüz gibi, değişkenleri kullanan komutlar aynı satıra yerleştirildiğinde, değişken değerlerinizi güncellemek için gecikmeli genişletmeyi kullanmanız gerekir. Değişkeniniz dizine eklenmişse, değerini aynı satırda güncellemek için %% değiştiricileri ile CALL komutunu kullanın:
set "i=5" & set "arg!i!=MyFile!i!" & call echo path!i!=%temp%\%%arg!i!%%
path5=C:\Users\UserName\AppData\Local\Temp\MyFile5
cmd /V:ON /c "set i=5 & set arg!i!=MyFile!i! & echo path!i!=%temp%\%arg!i!%"
Yani, RegAsm
bir bağlam menüsünden çalışan belirli bir görev (kayıt derleme) etkinleştirmeye çalışıyordum . Sahip olduğum sorun, sonuç okunmadan önce yanıp sönecek ve gidecekti. Bu yüzden Pause
, komut başarısız olduğunda borulama denedim (burada belirtildiği gibi Pause komutu .bat komut dosyasında çalışmıyor ve burada Toplu dosya komutu PAUSE çalışmıyor ). Bu yüzden denedim cmd /k
ama daha fazla komut için pencereyi açık bırakır (sadece sonucu okumak istiyorum). Bu yüzden zincire bir pause
takipçisi ekledim exit
ve sonuç olarak:
cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit
Bu bir cazibe gibi çalışır - RegAsm dosya üzerinde çalışır ve sonuçlarını gösterir, ardından "Devam etmek için herhangi bir tuşa basın ..." istemi gösterilir, ardından bir tuşa basıldığında komut istemi penceresi kapanır.
PS İlgilenebilecek başkaları için, .dll dosyalarına bir dllfile ilişkilendirmesi ve ardından buna bir RegAsm komut uzantısı eklemek için aşağıdaki .reg dosya girdilerini kullanabilirsiniz (kaçan tırnak ve ters eğik çizgilere dikkat edin):
[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"
Şimdi bir montajı kaydetmek için güzel bir sağ tıklama menüsüne sahibim.
Aynı pencerede iki ping yapmaya çalışıyorum ve aynı satırda seri bir komut. Birincisini bitirdikten sonra ikinci komutu çalıştırın.
Çözüm, start /b
Windows 7 komut isteminde birleştirmekti.
Her zamanki gibi, olmadan başlayın /b
ve ayrı bir pencerede başlatın.
Aynı satırda başlatmak için kullanılan komut:
start /b command1 parameters & command2 parameters
Herhangi bir şekilde, çıktıyı ayrıştırmak istiyorsanız, bunu kullanmanızı önermiyorum. Çıktının komutların çıktısı arasında karıştırıldığını fark ettim.
İki seçeneğiniz var: Boru tesisatı veya sadece &
:
DIR /S & START FILE.TXT
Veya,
tasklist | find "notepad.exe"
Piping ( |
), bir komutun çıktısını almak ve diğerine koymak için daha fazladır. Ve ( &
) sadece şunu çalıştırın derken.
&
ve |
yapmak ve hiç eğer, nasıl farklı? Şu anda bu kavramlara aşina olmayan insanlar, vakalarında hangisinin kullanılması gerektiğine kendileri karar veremiyorlar.
Hayır cd / && tree && echo %time%
. Yankılanma zamanı ilk komutun yürütüldüğü zamandır.
Boru tesisatının bir sorunu vardır, ancak insanlar nasıl çalıştığını bildiği sürece kritik değildir.
Bir örnek daha: Örneğin, gulp
derleme sistemini kullandığımızda,
gulp
- varsayılan> derleme
gulp build
- derleme klasörü oluştur
gulp watch
- dosya izlemeyi başlat
gulp dist
- dağıtım klasörü oluştur
Bunu tek bir çizgi ile yapabiliriz:
cd c:\xampp\htdocs\project & gulp & gulp watch
Değişkenleri bir satırda kullanmaya veya değiştirmeye çalıştığınızda içeriklerine dikkat edin! Örneğin, aşağıdaki gibi bir değişken
PATH=C:\Program Files (x86)\somewhere;"C:\Company\Cool Tool";%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
aşağıdaki gibi kullanırsanız, pek çok zorlukla sonuçlanabilir %PATH%
%PATH%
, parantez sorununu işlemek için kullanmanıza izin vermez%USERPROFILE%
içerecektir?Evet var. Öyle &
.
&&
komut 1 tamamlanmadığında, komut 2 başarısız olursa, komut 2'yi yürütür.
&
ne olursa olsun idam.
Kullanım &
pencerelerde sembolü tek satırda komut kullanmak
C:\Users\Arshdeep Singh>cd Desktop\PROJECTS\PYTHON\programiz & jupyter notebook
kullandığımız linux gibi,
touch thisfile ; ls -lstrh
Çok basit: sadece &&
işaretlerle ayırt edin. Misal:
echo "Hello World" && echo "GoodBye World".
"Güle Güle Dünyası", "Merhaba Dünya" dan sonra basılacaktır.
&&
bir
Hello World
. @jeb'in söylediği gibi &&
şartlı. &
önceki başarılı olup olmadığına bakılmaksızın komutları çalıştırır.