Was bedeutet "(" in cmd

Was bedeutet "(" in cmd

Immer wenn ich ein (, also einöffnende KlammerimEingabeaufforderung, das passiert:

(
More? 

Wenn ich weiter tippe( oder jedes andere Zeichen, wird mir die gleiche Meldung angezeigt.Dies wird gestoppt, wenn ich eingebe ), also dasschließende Klammer, obwohl ich eine Fehlermeldung erhalte, die besagt:

) was unexpected at this time

Abgesehen davon, ichkonnte nicht herausfinden, was dieser Befehl macht. Irgendwelche Ideen, was es macht?

Antwort1

() ist eigentlich kein Befehl, sondern ein Gruppierungsoperator, mit dem Sie eine Befehlsfolge gruppieren können, um sie dort zu verwenden, wo die CMD-Shell normalerweise einen einzelnen Befehl erwartet.
Die Befehle zwischen den () werden tatsächlich in einer separaten Instanz von CMD ausgeführt. Wenn Sie "(" manuell eingeben, betreten Sie diese neue Instanz und sie wartet auf Ihre Befehle.

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

Beachten Sie, dass IF ELSE normalerweise in derselben Zeile stehen sollte und Sie in der THEN- und ELSE-Klausel nur einen einzigen Befehl ausführen können.
Die Verwendung von „()“ behandelt den gesamten (xxxxx)-Block als einen einzigen Befehl und sogar so, als ob er in derselben Zeile stünde.

Antwort2

Viele gute Informationen wurden hier bereits veröffentlicht – z. B. sind Klammern„Ein Gruppierungsoperator, der es Ihnen ermöglicht, eine Folge von Befehlen zu gruppieren, um sie an der Stelle zu verwenden, an der die CMD-Shell normalerweise einen einzelnen Befehl erwartet.“Das„sind wie einBlock beginnenUndEndblock— aber einige einfache Dinge wurden übersehen:

1. So vermeiden Sie den Fehler „Unerwartet zu diesem Zeitpunkt“

Sie können etwas Nützliches bewirken, indem Sie einfach Befehle in die Eingabeaufforderung eingeben More? :

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:\>

Sie können mehrere Befehle in separate Zeilen eingeben und diese )an das Ende der letzten Zeile verschieben:

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. Wie wirkt sich (dies )auf die Bedeutung eines Befehls aus?

Wie andere bereits erwähnt haben, gibt es Befehle wie

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

wobei die ()Teil der Syntax des Befehls selbst sind ( FORin diesem Fall ). Wenn Sie die Klammern entfernen, erhalten Sie einen Syntaxfehler. Davon spreche ich nicht.

Wie angegebenbis zum Erbrechen, KlammernGruppeBefehle. Betrachten Sie diese Befehlszeile:

echo cat & echo dog | findstr /n a

Es bedeutet

  1. Tun Sie es echo cat, und dann
  2. Da echo dog | findstr /n a
    das Wort „dog“ den Buchstaben „a“ nicht enthält, erzeugt dieser Befehl keine Ausgabe.

Dementsprechend lautet die Ausgabe für das Obige

C:\> echo cat & echo dog | findstr /na
Katze

Ähnlich,

C:\> echo cat & echo dog | findstr /no
Katze
1:Hund

in dem wir die zusätzliche 1:dogAusgabe erhalten, weil „Hund“tutenthalten „o“, und „dog“ ist das erste (11.) Eingabezeile für den findstrBefehl.

Betrachten Sie nun

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

(dasselbe wie oben, aber mit zusätzlichen Klammern), was bedeutet

  1. Tun Sie es echo cat,
    und dann
    tun Sie es echo dog, und
  2. Nehmen Sie die Ausgabe von oben und leiten Sie sie weiter infindstr /n a

Also,

C:\> (Echo Katze & Echo Hund) | findstr /na
1:Katze

C:\> (Echo Katze & Echo Hund) | findstr /no
2:Hund

weil die Ausgabe auf der linken Seite (#1) der Befehlszeile

cat
dog

und „a“ wird online gefunden1dieses Textes, und „o“ findet sich auf der Linie2. Wir erhalten keine Ausgabezeile mehr, die nur cat (ohne Zeilennummer) lautet, da dies echo catkein eigenständiger Befehl mehr ist, sondern Teil derGruppedas bildet die linke Seite der Pipeline.

Hier ist ein einfacheres Beispiel für die Gruppierung von Befehlen:

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

Und natürlich können Sie, wie oben und in den anderen Antworten gezeigt, Zeilenumbrüche innerhalb der Gruppe einfügen:

C:\> (
Mehr? Echo Cat
Mehr? Echo Dog
Mehr? ) | findstr /na
1:Katze

3. Erstellen Klammern eine neue Instanz von CMD?

Ich glaube nicht, jedenfalls nicht in einer offensichtlichen, sinnvollen Weise:

C:\> (cd windows)

C:\Windows> set a=aardvark

C:\Windows> (set a=bat)

C:\Windows> echo %a%
bat

Beachten Sie, dass die cdKlammern das Arbeitsverzeichnis des Haupt-CMD-Prozesses ändern und setden Variablenwert überschreiben, der außerhalb der Klammern festgelegt wurde.

Antwort3

Die ( und ) sind wie ein begin blockund end block. Alles, was Sie in eine Batchdatei (.bat) einfügen können, können Sie auch in die Befehlszeile eingeben.

Ich kann zum Beispiel eine Batchdatei schreiben, mit der ich einen Anweisungsblock in Folgendes einfügen kann if:

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

Wenn ich den Batch jetzt ohne Parameter ausführe, erhalte ich alle Befehle zwischen (und )zum Ausführen. Wenn ein erster Parameter angegeben wird, ist die einzige Ausgabe „END“.

Nun zurück zur Kommandozeile: Ich kenne keine Tricks oder Techniken, um dies tatsächlich durch direkte Eingabe in die Kommandozeile zu nutzen. Es gelten jedoch die gleichen Regeln. Geben Sie in der Kommandozeile Folgendes ein:

(echo "1" & echo "2")

Die Ausgabe ist:

1
2

verwandte Informationen