Windows: come specificare il comando multilinea al prompt dei comandi?


170

come estendere un comando alla riga successiva?

fondamentalmente qual è l'alternativa di Windows per Linux

ls -l \
/usr/

qui usiamo la barra rovesciata per estendere il comando sulla riga successiva

qual è l'equivalente per windows?


+1 per breve e concisa Q & A, un'esplorazione più estesa di movimentazione cursore a stackoverflow.com/questions/69068/...
opaco wilkie

Risposte:


296

Dopo aver provato quasi tutti i tasti sulla mia tastiera:

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

C:\Users\Tim\Desktop>

Quindi sembra essere il tasto ^.


13
Microsoft non può rispettare i propri standard, quindi non funziona in PowerShell. L'equivalente di PowerShell a ^ è `So C: \ Users \ Tim> cd` >> Desktop Ti porta al desktop di Tim \ 0 /
Ric Jafe,

3
@RicJafe Perché dovrebbe? PowerShell è completamente separato! La chiave equivalente per PS è `.
WhatIsHeDoing

Qualche idea su cosa sia in PowerShell?
Ryan,

3
@RyanSeanWattrus Utilizzando lo stesso metodo molto scientifico: `(l'accent grave)
Timbo

57

Nel prompt dei comandi di Windows ^viene utilizzato per uscire dal carattere successivo nella riga di comando. (Like \è usato nelle stringhe.) I caratteri che devono essere usati nella riga di comando così come sono devono avere un ^ prefisso, quindi è per questo che funziona per la nuova riga.

Per riferimento i caratteri che necessitano di escape (se specificato come argomento di comando e non tra virgolette) sono: &|()

Quindi l'equivalente del tuo esempio di Linux sarebbe (il Più? Essendo un prompt):

C:\> dir ^
More? C:\Windows

15
Il carattere '^' dovrebbe essere l'ultimo carattere in linea. Altrimenti, se hai SPACE alla fine, il comando multilinea non funziona.
Dmytro Ovdiienko,

6

Il personaggio con il punto di inserimento funziona, tuttavia la riga successiva non deve iniziare con virgolette doppie. ad esempio questo non funzionerà:

C:\ ^
"SampleText" ..

Inizia la riga successiva senza virgolette (non un esempio valido, solo per illustrare)


1

Se sei venuto qui alla ricerca di una risposta a questa domanda, ma non esattamente come intendeva l'OP, ovvero come si fa a far funzionare la CMD multilinea su una sola linea, ho una sorta di risposta pericolosa per te.

Cercare di usarlo con cose che usano effettivamente le tubazioni, come dire findstrè abbastanza problematico. Lo stesso vale per trattare con elses. Ma se vuoi solo un comando condizionale multilinea da eseguire direttamente da CMD e non tramite un file batch, questo dovrebbe funzionare bene.

Supponiamo che tu abbia qualcosa del genere in un batch che desideri eseguire direttamente nel prompt dei comandi:

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

Ora, puoi usare il carat di continuazione di riga ( ^) e digitarlo manualmente in questo modo, ma attenzione, è noioso e se sbagli puoi imparare la gioia di scrivere di nuovo tutto.

Bene, non funzionerà solo ^grazie ai meccanismi di fuga all'interno delle parentesi scrollate Almeno non come scritto. In realtà dovresti raddoppiare i carati in questo modo:

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

Invece, puoi essere uno scripter subdolo sporco dal lato sbagliato delle tracce che non ha bisogno di carati scambiandoli con una singola pipe ( |) per la continuazione di un loop / espressione:

@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"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.