Windows: Wie wird ein mehrzeiliger Befehl an der Eingabeaufforderung angegeben?

170

Wie erweitern wir einen Befehl auf die nächste Zeile?

Grundsätzlich, was ist die Windows-Alternative für Linux

ls -l \
/usr/

Hier verwenden wir Backslash, um den Befehl in der nächsten Zeile zu erweitern

Was ist das Äquivalent für Windows?

Jigar
quelle
+1 für kurze und prägnante Fragen und Antworten
Matt Wilkie

Antworten:

295

Nachdem ich fast jede Taste auf meiner Tastatur ausprobiert habe:

C:\Users\Tim>cd ^
Mehr? Desktop

C:\Users\Tim\Desktop>

Es scheint also der Schlüssel zu sein.

Timbo
quelle
13
Microsoft kann seine eigenen Standards nicht einhalten, daher funktioniert dies in PowerShell nicht. Das PowerShell-Äquivalent zu ^ lautet `Also C: \ Users \ Tim> cd` >> Desktop. Bringt Sie zu Tims Desktop \ 0 /
Ric Jafe
3
@ RicJafe Warum sollte es? PowerShell ist völlig separat! Der entsprechende Schlüssel für PS ist `.
WhatIsHeDoing
Irgendeine Idee, was es in Powershell ist?
Ryan
3
@ RyanSeanWattrus Mit der gleichen sehr wissenschaftlichen Methode: `(l'accent Grab)
Timbo
57

In der Windows-Eingabeaufforderung wird das ^verwendet, um das nächste Zeichen in der Befehlszeile zu maskieren. (Wie \wird in Zeichenfolgen verwendet.) Zeichen, die in der Befehlszeile so wie sie sind verwendet werden müssen, sollten ein ^ vorangestellt werden, daher funktioniert dies für die neue Zeile.

Als Referenz sind die Zeichen, die maskiert werden müssen (sofern sie als Befehlsargumente und nicht in Anführungszeichen angegeben sind): &|()

Das Äquivalent Ihres Linux-Beispiels wäre also (das Mehr? Ist eine Eingabeaufforderung):

C:\> dir ^
More? C:\Windows
Daemin
quelle
15
Das Zeichen '^' sollte das letzte Zeichen in der Zeile sein. Andernfalls funktioniert der mehrzeilige Befehl nicht, wenn Sie am Ende SPACE haben.
Dmytro Ovdiienko
6

Das Caret-Zeichen funktioniert, die nächste Zeile sollte jedoch nicht mit doppelten Anführungszeichen beginnen. zB funktioniert das nicht:

C:\ ^
"SampleText" ..

Beginnen Sie die nächste Zeile ohne doppelte Anführungszeichen (kein gültiges Beispiel, nur zur Veranschaulichung)

Ali
quelle
1

Wenn Sie hierher gekommen sind, um eine Antwort auf diese Frage zu suchen, aber nicht genau so, wie es das OP bedeutete, dh wie Sie mehrzeiliges CMD dazu bringen, in einer einzigen Zeile zu arbeiten, habe ich eine Art gefährliche Antwort für Sie.

Der Versuch, dies mit Dingen zu verwenden, die tatsächlich Rohrleitungen verwenden, wie zum Beispiel, findstrist ziemlich problematisch. Gleiches gilt für den Umgang mit elses. Wenn Sie jedoch nur möchten, dass ein mehrzeiliger bedingter Befehl direkt von CMD und nicht über eine Batchdatei ausgeführt wird, sollte dies gut funktionieren.

Angenommen, Sie haben so etwas in einem Stapel, den Sie direkt in der Eingabeaufforderung ausführen möchten:

@echo off
for /r %%T IN (*.*) DO (
    if /i "%%~xT"==".sln" (
        echo "%%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file
        echo Dumping SLN file contents
        type "%%~T"
    )
)

Jetzt können Sie das Zeilenfortsetzungskarat ( ^) verwenden und es manuell so eingeben, aber Warnung, es ist mühsam und wenn Sie es vermasseln, können Sie die Freude lernen, alles wieder abzutippen.

Nun, es wird nicht funktionieren, nur ^dank der Fluchtmechanismen in Klammern zuckt die Achseln. Zumindest nicht wie geschrieben. Sie müssten die Karat tatsächlich so verdoppeln:

@echo off ^
More? for /r %T IN (*.sln) DO (^^
More? if /i "%~xT"==".sln" (^^
More? echo "%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file^^
More? echo Dumping SLN file contents^^
More? type "%~T"))

Stattdessen können Sie ein schmutziger, hinterhältiger Scripter von der falschen Seite der Tracks sein, der keine Karat benötigt, indem Sie sie gegen eine einzelne Pipe ( |) pro Fortsetzung einer Schleife / eines Ausdrucks austauschen :

@echo off
for /r %T IN (*.sln) DO if /i "%~xT"==".sln" echo "%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file | echo Dumping SLN file contents | type "%~T"
kayleeFrye_onDeck
quelle