web-dev-qa-db-fra.com

Windows: Comment spécifier une commande multiligne à l'invite de commande?

comment pouvons-nous étendre une commande à la ligne suivante?

essentiellement ce qui est l'alternative windows pour linux

ls -l \
/usr/

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

quel est l'équivalent pour Windows?

125
Jigar

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é ^.

217
Timbo

Dans l'invite de commande Windows, le ^ permet d'échapper au caractère suivant sur la ligne de commande. (Comme \ est utilisé dans les chaînes.) Les caractères qui doivent être utilisés dans la ligne de commande doivent être précédés du préfixe ^, c'est pourquoi il fonctionne pour la nouvelle ligne.

Pour référence, les caractères nécessitant un caractère d'échappement (s'ils sont spécifiés comme arguments de commande et non entre guillemets) sont les suivants: &|() 

L’équivalent de votre exemple linux serait donc (le Plus? étant une invite):

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

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

C:\ ^
"SampleText" ..

Commence la ligne suivante sans guillemets (exemple non valable, juste pour illustrer)

3
Ali

Si vous êtes venu ici pour chercher une réponse à cette question mais pas exactement ce que signifiait le PO, c’est-à-dire comment obtenir un CMD multiligne pour fonctionner dans un single line, j’ai une sorte de dangereuse réponds pour toi.

Essayer de l'utiliser avec des choses qui utilisent réellement la tuyauterie, comme par exemple findstr est assez problématique. Il en va de même pour le traitement de elses. Mais si vous souhaitez simplement qu'une commande conditionnelle multiligne s'exécute directement à partir de CMD et non via un fichier de commandes, cela devrait fonctionner correctement.

Disons que vous avez quelque chose comme ceci dans un lot que vous voulez exécuter directement dans la commande Invite: 

@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 le plaisir de tout taper à nouveau.

Eh bien, cela ne fonctionnera pas uniquement avec ^ grâce aux mécanismes d'échappement contenus dans les parenthèses haussement d'épaule Du moins pas comme écrit Il faudrait en fait 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 du mauvais côté des pistes qui n'ont pas besoin de carats en les échangeant contre un seul tuyau (|) par continuation 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"
0
kayleeFrye_onDeck