Windows: Jak określić polecenie wielowierszowe w wierszu polecenia?

170

jak rozszerzyć polecenie do następnej linii?

w zasadzie jaka jest alternatywa dla Windowsa dla Linuksa

ls -l \
/usr/

tutaj używamy odwrotnego ukośnika, aby rozszerzyć polecenie w następnej linii

jaki jest odpowiednik dla okien?

Jigar
źródło
+1 za krótkie i zwięzłe pytania i odpowiedzi, bardziej rozbudowane badanie obsługi karetki na stackoverflow.com/questions/69068/ ...
Matt Wilkie

Odpowiedzi:

295

Po wypróbowaniu prawie każdego klawisza na mojej klawiaturze:

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

C:\Users\Tim\Desktop>

Więc wydaje się, że jest to klawisz ^.

Timbo
źródło
13
Firma Microsoft nie może przestrzegać swoich własnych standardów, więc nie działa to w programie PowerShell. Odpowiednikiem programu PowerShell ^ jest `` So C: \ Users \ Tim> cd '' >> Pulpit przenosi do pulpitu Tima \ 0 /
Ric Jafe,
3
@RicJafe Dlaczego warto? PowerShell jest całkowicie oddzielny! Odpowiedni klucz dla PS to `.
WhatIsHeDoing
Masz jakiś pomysł, co to jest w PowerShell?
Ryan
3
@RyanSeanWattrus Używając tej samej, bardzo naukowej metody: `(l'accent grave)
Timbo,
57

W ^wierszu poleceń systemu Windows znak jest używany do zmiany znaczenia następnego znaku w wierszu poleceń. (Podobnie jak \jest używane w łańcuchach). Znaki, które muszą być użyte w wierszu poleceń tak jak są, powinny mieć przedrostek ^, dlatego właśnie działa to w przypadku nowej linii.

Dla porównania, znaki, które wymagają znaku ucieczki (jeśli są podane jako argumenty poleceń, a nie w cudzysłowach) to: &|()

Tak więc odpowiednikiem twojego przykładu linuxa byłoby ( znak zachęty Więcej? ):

C:\> dir ^
More? C:\Windows
Daemin
źródło
15
Znak „^” powinien być ostatnim znakiem w wierszu. W przeciwnym razie, jeśli masz SPACJĘ na końcu, polecenie multilinii nie będzie działać.
Dmytro Ovdiienko
6

Znak daszka działa, jednak następny wiersz nie powinien zaczynać się od podwójnych cudzysłowów. np. to nie zadziała:

C:\ ^
"SampleText" ..

Rozpocznij następną linię bez cudzysłowów (nie jest to prawidłowy przykład, tylko do zilustrowania)

Ali
źródło
1

Jeśli przyszedłeś tutaj, szukając odpowiedzi na to pytanie, ale nie dokładnie tak, jak oznaczał to OP, tj. Jak sprawić, aby wieloliniowy CMD działał w jednej linii, to mam dla Ciebie niebezpieczną odpowiedź.

Próba użycia tego do rzeczy, które faktycznie używają rur, takich jak powiedz, findstrjest dość problematyczna. To samo dotyczy radzenia sobie z elses. Ale jeśli chcesz, aby wielowierszowe polecenie warunkowe było wykonywane bezpośrednio z CMD, a nie przez plik wsadowy, powinno to działać dobrze.

Powiedzmy, że masz coś takiego w partii, którą chcesz uruchomić bezpośrednio w wierszu poleceń:

@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"
    )
)

Teraz możesz użyć linii-kontynuacji carat ( ^) i ręcznie wpisać to w ten sposób, ale ostrzeżenie, jest to żmudne i jeśli się pomylisz, możesz nauczyć się radości z wpisywania wszystkiego od nowa.

Cóż, nie zadziała tylko ^dzięki uciekającym mechanizmom wewnątrz nawiasów wzruszających ramionami Przynajmniej nie tak, jak napisano. Właściwie musiałbyś podwoić karaty w następujący sposób:

@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"))

Zamiast tego możesz być brudnym, podstępnym skrypciarzem po złej stronie ścieżek, które nie potrzebują karatów, zamieniając je na pojedynczą potokę ( |) na kontynuację pętli / wyrażenia:

@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
źródło