![Was bedeutet "(" in cmd](https://rvso.com/image/1525442/Was%20bedeutet%20%22(%22%20in%20cmd.png)
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 ( FOR
in 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
- Tun Sie es
echo cat
, und dann - 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:dog
Ausgabe erhalten, weil „Hund“tutenthalten „o“, und „dog“ ist das erste (11.) Eingabezeile für den findstr
Befehl.
Betrachten Sie nun
(echo cat & echo dog) | findstr /n a
(dasselbe wie oben, aber mit zusätzlichen Klammern), was bedeutet
- Tun Sie es
echo cat
,
und dann
tun Sie esecho dog
, und - Nehmen Sie die Ausgabe von oben und leiten Sie sie weiter in
findstr /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 cat
kein 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 cd
Klammern das Arbeitsverzeichnis des Haupt-CMD-Prozesses ändern und set
den Variablenwert überschreiben, der außerhalb der Klammern festgelegt wurde.
Antwort3
Die ( und ) sind wie ein begin block
und 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