Windows: comment spécifier une commande multiligne sur l'invite de commande?

170

comment étendre une commande à la ligne suivante?

fondamentalement quelle est l'alternative Windows pour Linux

ls -l \
/usr/

ici, nous utilisons une barre oblique inverse pour étendre la commande sur la ligne suivante

quel est l'équivalent pour Windows?

Jigar
la source
+1 pour des questions et réponses courtes et concises, une exploration plus approfondie de la gestion du
curseur

Réponses:

297

Après avoir essayé presque toutes les touches de mon clavier:

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

C:\Users\Tim\Desktop>

Cela semble donc être la clé ^.

Timbo
la source
13
Microsoft ne peut pas se conformer à ses propres normes, donc cela ne fonctionne pas dans PowerShell. L'équivalent PowerShell à ^ est `So C: \ Users \ Tim> cd` >> Desktop vous
amène
3
@RicJafe Pourquoi devrait-il? PowerShell est complètement séparé! La clé équivalente pour PS est `.
WhatIsHeDoing
Une idée de ce que c'est dans PowerShell?
Ryan
3
@RyanSeanWattrus En utilisant la même méthode très scientifique: `(accent grave)
Timbo
57

Dans l'invite de commande Windows, le ^est utilisé pour échapper au caractère suivant sur la ligne de commande. (Like \est utilisé dans les chaînes.) Les caractères qui doivent être utilisés dans la ligne de commande tels quels devraient avoir un ^ préfixé, c'est pourquoi cela fonctionne pour la nouvelle ligne.

Pour référence, les caractères qui doivent être échappés (s'ils sont spécifiés comme arguments de commande et non entre guillemets) sont: &|()

Donc, l'équivalent de votre exemple Linux serait (le Plus? Étant une invite):

C:\> dir ^
More? C:\Windows
Daemin
la source
15
Le caractère «^» doit être le dernier caractère de la ligne. Sinon, si vous avez ESPACE à la fin, la commande multiligne ne fonctionne pas.
Dmytro Ovdiienko
6

Le caractère caret fonctionne, mais la ligne suivante ne doit pas commencer par des guillemets doubles. par exemple cela ne fonctionnera pas:

C:\ ^
"SampleText" ..

Commencez la ligne suivante sans guillemets (ce n'est pas un exemple valide, juste pour illustrer)

Ali
la source
1

Si vous êtes venu ici à la recherche d'une réponse à cette question mais pas exactement de la manière dont l'OP le signifiait, c'est-à-dire comment faire fonctionner le CMD multiligne en un seul ligne, j'ai une sorte de réponse dangereuse pour vous.

Essayer de l'utiliser avec des choses qui utilisent réellement la tuyauterie, comme par exemple, findstrest assez problématique. Il en va de même pour l'examen de l' elseart. Mais si vous voulez juste qu'une commande conditionnelle multiligne s'exécute directement à partir de CMD et non via un fichier de commandes, cela devrait bien fonctionner.

Disons que vous avez quelque chose comme ça dans un lot que vous souhaitez exécuter directement dans l'invite de commande:

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

Maintenant, vous pouvez utiliser le carat de continuation de ligne ( ^) et le taper manuellement comme ceci, mais attention, c'est fastidieux et si vous vous trompez, vous pouvez apprendre la joie de tout taper à nouveau.

Eh bien, il ne fonctionnera pas avec seulement ^grâce à échapper à des mécanismes de l' intérieur entre parenthèses de au moins pas écrit. Vous auriez en fait besoin de doubler les carats comme ceci:

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

Au lieu de cela, vous pouvez être un scripteur sournois sale du mauvais côté des pistes qui n'ont pas besoin de carats en les échangeant contre un seul tube ( |) par suite d'une boucle / expression:

@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
la source