如何将命令扩展到下一行?

基本上,Linux的Windows替代品是什么:

ls -l \
/usr/

这里我们使用反斜杠将命令扩展到下一行。

Windows有什么对应的功能?


在尝试了键盘上的几乎每个键后:

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

C:\Users\Tim\Desktop>

所以好像是^ key。


在Windows命令提示符中,^用于转义命令行的下一个字符。(比如\在字符串中使用。)需要在命令行中使用的字符应该有一个^前缀,因此这就是为什么它适用于换行符。

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

因此,与您的linux示例等效的是(the More?作为提示):

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

插入字符可以,但是下一行不应该以双引号开始。例如,这将不起作用:

C:\ ^
"SampleText" ..

开始下一行时不要使用双引号(不是一个有效的示例,只是为了说明)


如果你来这里寻找这个问题的答案,但不完全是OP的意思,即如何让多行CMD在单行中工作,我有一个危险的答案给你。

试图将它与使用管道的东西一起使用,比如findstr,是很有问题的。与他人相处也是如此。但如果你只是想要一个多行条件命令直接从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"
    )
)

现在,您可以使用行延续符carat(^)并像这样手动输入它,但警告,这很乏味,如果您搞砸了,您可以重新输入它的乐趣。

好吧,由于括号内的转义机制,它不能工作,至少不能像写的那样。你实际上需要把克拉数加倍,像这样:

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

解决方法1在CMD中,以^为例

docker run -dp 3000:3000 ^
  -w /app -v "$(pwd):/app" ^
  --network todo-app ^
  -e MYSQL_HOST=mysql ^
  -e MYSQL_USER=root ^
  -e MYSQL_PASSWORD=secret ^
  -e MYSQL_DB=todos ^
  node:12-alpine ^
  cmd "npm install && yarn run start"

解决方案2在PowerShell中,使用'(反引号),例如

docker run -dp 3000:3000 `
  -w /app -v "$(pwd):/app" `
  --network todo-app `
  -e MYSQL_HOST=mysql `
  -e MYSQL_USER=root `
  -e MYSQL_PASSWORD=secret `
  -e MYSQL_DB=todos `
  node:12-alpine ^
  cmd "npm install && npm run start"

在windows 10 22H2中,只需在开括号后按enter,就会得到与在行末输入^相同的结果。 例如,在输入这行代码后:

>for %f in (*) do (

按enter键,会自动弹出如下一行:

More?