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

Jig*_*gar 154 windows command-line

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

基本上是Linux的替代品

ls -l \
/usr/
Run Code Online (Sandbox Code Playgroud)

这里我们使用反斜杠来扩展下一行的命令

什么是Windows的等价物?

Tim*_*mbo 262

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

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

C:\Users\Tim\Desktop>
Run Code Online (Sandbox Code Playgroud)

所以它似乎是^关键.

  • Microsoft无法遵守自己的标准,因此在PowerShell中无法使用。相当于^的PowerShell是`So C:\ Users \ Tim> cd`>>桌面将您带到Tim的桌面\ 0 / (5认同)
  • @RicJafe为什么要这样?PowerShell是完全独立的!PS的等效键为`。 (2认同)
  • @RyanSeanWattrus使用同样非常科学的方法:`(l'accent grave) (2认同)

nhu*_*uvy 54

解决方案 1在 CMD 中,使用^, example

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"
Run Code Online (Sandbox Code Playgroud)

解决方案 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"
Run Code Online (Sandbox Code Playgroud)


Dae*_*min 52

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

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

所以相当于你的linux示例(更多?是一个提示):

C:\> dir ^
More? C:\Windows
Run Code Online (Sandbox Code Playgroud)

  • '^'字符应该是最后一个字符.否则,如果最后有SPACE,则多行命令不起作用. (11认同)

kay*_*eck 8

如果你来这里寻找这个问题的答案,但不完全是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"
    )
)
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用续行符克拉 ( ^) 并像这样手动输入,但警告,这很乏味,如果您搞砸了,您可以体会再次输入全部内容的乐趣。

^好吧,仅仅由于括号内的转义机制,它不会工作耸肩至少不是按写的那样。实际上,您需要将克拉加倍,如下所示:

@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"))
Run Code Online (Sandbox Code Playgroud)

|相反,您可以通过在每个循环/表达式的延续中将它们替换为单个管道 ( ) 来从轨道的错误一侧成为不需要任何克拉的肮脏鬼祟的脚本编写者:

@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"
Run Code Online (Sandbox Code Playgroud)


小智 6

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

C:\ ^
"SampleText" ..
Run Code Online (Sandbox Code Playgroud)

开始下一行没有双引号(不是一个有效的例子,只是为了说明)