如何编写多行命令?

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

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

ls -l \
/usr/

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

Windows有什么对应的功能?

174383 次浏览

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

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


C:\Users\Tim\Desktop>

所以好像是^ key。

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

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

因此,与你的linux示例等效的是(更多?是一个提示符):

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

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

C:\ ^
"SampleText" ..

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

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

尝试将此用于实际使用管道的东西,如findstr,是相当有问题的。处理__abc1也是一样。但如果你只是想要一个多行条件命令直接从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"

解决方案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,就会得到与在行末键入^相同的结果。 例如:< / p >
>for %f in (*) do (

enter在这里,你自动在一个新的行:

More?