“(” Cmd cinsinden ne demektir?


4

Ne zaman yazsam (yani açılış parantezi içinde Komut istemi , bu olur:

(
More? 

Yazmaya devam edersem ( veya başka bir karakter , aynı mesajla beni uyarıyor. Bu durduruldu eğer girersem )yani parantez kapanışı Her ne kadar bir hata alıyorum, ancak şöyle diyor:

) was unexpected at this time

Bunun dışında ben bu komutun ne yaptığını bulamadım . Ne yaptığı hakkında bir fikrin var mı?


2
Parantez, komutları birden fazla satıra bölmek için kullanılabilir, ancak belki başka biri size daha eksiksiz bir cevap verebilir.
User552853

@ User552853 Gerçekten değil. "More" göründüğünde, bununla daha alakalı (ve belki de sadece ilgili), tamamlanmamış bir komut var. Örneğin, Parens burada yardım edemez - örneğin dir (& lt; new line & gt;) / p gibi yapamazsınız. Böylece parantez bir komutu orada birden çok satıra bölmeye yardımcı olmaz. Aslında, şapka, herhangi bir komutu ne olursa olsun, birden fazla satıra bölmek için kullanılır. Deneyin echo ^ ve "Daha?" diyecek. Yuvarlak parantezler komutu etkileyebilir (komut yine de kullanmazsa).
barlop

İronik olarak, eğer (sorunuzun başlığının önerdiği gibi alıntı yaparak) 'Daha fazla' alamayacaksınız. Ve (değişmez olarak kabul edilir).
barlop

Yanıtlar:


6

() gerçekten bir komut değil, CMD kabuğunun normalde tek bir komutun görünmesini beklediği yerde kullanmak için bir komut dizisini birlikte gruplamanıza izin veren bir gruplama işlecidir.
() Arasındaki komutlar aslında ayrı bir CMD örneğinde yürütülür. "(" 'Yi elle yazdığınızda, bu yeni örneği girersiniz ve komutlarınızı bekler.

if not exist c:\myfile (
  echo File doesn't exist
) else (
  echo File DOES exists
  del c:\myfile
)

Normal olarak IF ELSE'in aynı satırda olması gerektiğini ve THEN ve ELSE yan tümcesinde yalnızca tek bir komut çalıştırabileceğinizi unutmayın.
"()" Kullanmak, tüm (xxxxx) bloğunu tek bir komut olarak ve aynı satırda göründüğü gibi kabul eder.


katılıyorum () komutları gruplamak için kullanılır, ama belki de bu değil. Ne dersin for %f in (*.txt) do echo %f Ebeveynler grup komutları için orada değildir ve eğer ebeveynleri oradan kaldırırsanız, sözdizimi hatası alırsınız.
barlop

() Arasındaki komutlar aslında ayrı bir CMD örneğinde yürütülür. ? Gerçekten? Görev Yöneticisi'nde kontrol edin…
JosefZ

@barlop FOR IN () içindeki (), FOR'un sözdiziminin bir parçasıdır. Bunu DO () ile takip ederseniz, DO ile birlikte gelen parantez yine parantezleri gruplandırır.
Tonny

@JosefZ Örneğin; setlocal. Bu yeni bir süreç değil.
Tonny

@Tonny "mantıksal örnek" ile ne kastediyorsunuz? Yeni bir "mantıksal örnek" olmasaydı neye benziyordu? Google’da bahsettiğiniz bu şeyden bahseden herhangi bir şeyi işaret edebilir misiniz (yeni bir "mantıksal örnek" oluşturabilir misiniz?)
barlop

3

Buraya zaten çok fazla iyi bilgi gönderildi - örneğin, parantez “Bir gruplama operatörü Bu, birlikte bir komut dizisini gruplandırmanıza olanak sağlar CMD kabuğunun normalde tek bir komut beklediği yerde kullanmak için görünmek" o “Bir gibisin bloğa başla ve bitiş bloğu - ancak bazı basit şeyler göz ardı edilmiştir:

1. “Şu anda beklenmedik” hatası nasıl elde edilemez

Olması için yararlı bir şey alabilirsiniz sadece komutları yazarak More?  Komut istemi:

C:\> (
More? date /t
More? )
Tue 04/11/2017

C:\> (
More? dir \Windows\win.ini
More? )
 Volume in drive C is OS
 Volume Serial Number is ▒▒▒▒-▒▒▒▒

 Directory of C:\Windows

08/13/2014  12:26 PM               435 win.ini
               1 File(s)            435 bytes
               0 Dir(s)  ▒▒▒,▒▒▒,▒▒▒,▒▒▒ bytes free

C:\>

Ayrı satırlara birden çok komut yazabilir ve ) son satırın sonuna kadar:

C:\> (
More? date /t
More? time /t
More? )
Tue 04/11/2017
06:18 PM

C:\> (
More? date /t
More? time /t)
Tue 04/11/2017
06:18 PM

C:\>

2. nasıl ( ve ) komutun anlamını etkiler mi?

Diğerlerinin de belirttiği gibi,

C:\> for %f in (\Windows\*.dll) do @echo %f

nerede ( ... ) komutun sözdiziminin parçası ( FOR, bu durumda). Parantezleri kaldırırsanız, sözdizimi hatası alırsınız. Bunun hakkında konuşmuyorum.

Belirtildiği gibi reklam nauseam , parantez içinde grup emreder. Bu komut satırını göz önünde bulundurun:

echo cat & echo dog | findstr /n a

Anlamı

  1. Yap echo cat, ve sonra
  2. Yap echo dog | findstr /n a
    “Köpek” kelimesi “a” harfini içermediğinden, bu komut çıktı vermeyecektir.

Buna göre, yukarıdaki çıktı

C:\> echo cat & echo dog | findstr /n a
cat

Benzer şekilde,

C:\> echo cat & echo dog | findstr /n o
cat
 1:  köpek 

ek olarak aldığımız 1: köpek çıktı, çünkü “köpek” yapar “o” içeren, ve “köpek” ilkidir ( 1 st) giriş hattını findstr Komut.

Şimdi düşünün

(echo cat & echo dog) | findstr /n a

(yukarıdakiyle aynı, ancak parantez eklenmiş), yani

  1. Yap echo cat,
    ve sonra
    yap echo dog, ve
  2. Çıktısını yukarıdan alın ve içine yerleştirin findstr /n a

Yani,

C:\> (echo cat & echo dog) | findstr /n a
 1:  kedi

C: \ & gt; (eko kedi ve yankı köpeği) | findstr / n o  2:  köpek 

çünkü komut satırının sol tarafındaki (# 1) çıktı

cat
dog

ve “a” satırda bulunur 1 bu metnin ve “o” satırında bulunur 2 . Artık sadece yazan bir çıktı satırı alamıyoruz cat (satır numarası olmadan) Çünkü echo cat artık bağımsız bir emir değil. ama bir parçası grup boru hattının sol tarafını oluşturur.

İşte daha basit bir komut grubu örneği:

C:\Temp> echo cat & echo dog > animals
cat

C:\Temp> type animals
dog

C:\Temp> (echo cat & echo dog) > animals

C:\Temp> type animals
cat
dog

Ve elbette, yukarıda ve diğer cevaplarda gösterildiği gibi, gruba satır sonları ekleyebilirsiniz:

C:\> (
More? echo cat
More? echo dog
More? ) | findstr /n a
 1:  kedi 

3. Parantezler yeni bir CMD örneği oluşturuyor mu?

Sanmıyorum; bariz, anlamlı bir şekilde değil:

C:\> (cd windows)

C:\Windows> set a=aardvark

C:\Windows> (set a=bat)

C:\Windows> echo %a%
bat

Unutmayın cd parantez içinde Ana CMD işleminin çalışma dizinini değiştirir, ve set parantez içinde Parantez dışında ayarlanan değişken değerini geçersiz kılar.


1

(Ve) bir gibidir begin block ve end block. Bir toplu iş dosyasına (.bat) koyabileceğiniz herhangi bir şey komut satırına yazılabilir.

Mesela bir toplu iş dosyası yazabilirim içine bir ifade bloğu ekleyebilir. if:

if "%1"=="" (
  echo Multiple
  echo Lines when no parameter
)
echo END

Şimdi partiyi parametreler olmadan çalıştırdığımda, arasındaki komutları alıyorum. ( ve ) koşmak. İlk parametre verildiğinde, sadece çıkış 'SON' olur.

Şimdi komut satırına geri dönelim: Bunu doğrudan komut satırına yazarak kullanacak numaralar veya teknikler olmadığını biliyorum. Ancak aynı kuralları izler. Komut satırında aşağıdakileri girin:

(echo "1" & echo "2")

Çıktı:

1
2

İkinci örneğiniz, ilk cümlenizin yanlış veya yanlış olduğunu gösterir, eğer doğru olsalar bile, sadece çoklu satırlı başlangıç ​​bloğu ve bitiş bloğu için değildirler. IF'yi bir satırda parantez içinde de yapabilirsiniz.
barlop

Ayrıca açık bir parenlerin bazen yeni bir satıra başlamanıza izin vermesinin nedeni, bir bloğu açmak veya bitirmek değildir. Örneğin, aynı zamanda for %f in ( ve “for” un yapılmayan kısmı (herhangi bir tipik programlama terminolojisinin uygulanabileceği ölçüde) genellikle bir blok sayılmaz.
barlop

not- "ikinci örneği" yazdığımda ((echo "1" & ec; echo "2") 'ye atıfta bulundum ve btw' ye 1 ve 2 'yi tırnak içine almak için hiçbir neden yok.
barlop

Notlar için teşekkürler. İkinci örnekte tekliflere gerek olmadığına tamamen katılıyorum. Aynı davranışın bir toplu iş dosyasındaki gibi komut satırında da çalıştığını belirtmeye çalışıyordum. BTW Birisi doğru çalışması için () olması gereken bir komut satırı ekleyebilirse çok ilgilenirim.
miltonb

1
milton, "Birisi doğru çalışması için () olması gereken bir komut satırı ekleyebilirse çok ilgilenirim" yazdınız yanıt olarak, bu bir örnek olacaktır. for %f in (*.*) do echo %f Böylece, parens kaldırmak bu komutun çalışmamasına neden olur.
barlop
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.