Windows:如何在命令提示符下指定多行命令?


Answers:


295

在尝试了键盘上几乎所有的键之后:

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

C:\Users\Tim\Desktop>

因此,这似乎是^键。


13
Microsoft无法遵守自己的标准,因此在PowerShell中无法使用。相当于^的PowerShell是`So C:\ Users \ Tim>
cd`

3
@RicJafe为什么要这样?PowerShell是完全独立的!PS的等效键为`。
WhatIsHeDoing

关于它在powershell中有什么想法吗?
瑞安

3
@RyanSeanWattrus使用相同的非常科学的方法:`(l'accent坟墓)
Timbo,

57

在Windows命令提示符中,^用于转义命令行中的下一个字符。(就像\在字符串中使用的一样。)需要在命令行中按原样使用的字符应在其前面加上^,因此这就是它在换行符中起作用的原因。

作为参考,需要转义的字符(如果指定为命令参数且不在引号内): &|()

因此,相当于您的linux示例是(更多?是提示):

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

15
'^'字符应为行中的最后一个字符。否则,如果结尾有空格,则多行命令将不起作用。
Dmytro Ovdiienko 2015年

6

尖号字符有效,但是下一行不应以双引号开头。例如,这将不起作用:

C:\ ^
"SampleText" ..

在没有双引号的情况下开始下一行(这不是一个有效的示例,仅用于说明)


1

如果你来到这里寻找一个回答这个问题,但没有确切的OP的意思的方式,也就是你怎么在获得多行CMD工作行,我有一种适合你危险的答案。

试图将其与实际使用管道的东西一起使用,例如说findstr是相当成问题的。处理elses也是如此。但是,如果您只想直接从CMD而不是通过批处理文件执行多行条件命令,那么这应该可以很好地工作。

假设您要在命令提示符下直接运行批处理中的以下内容:

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

现在,您可以使用行连续克拉(^)并像这样手动将其键入,但是警告,这很乏味,如果您搞砸了,可以学习再次将其全部键入的乐趣。

那么,它不会只工作^由于逃逸机制的括号内耸肩至少不会像写。实际上,您实际上需要像这样将克拉数加倍:

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

取而代之的是,您可以从不需要|循环数的轨道的另一端成为肮脏的偷偷摸摸的脚本编写者,方法是在每次循环/表达式的连续执行中将它们换成单个管道():

@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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.