如何在FOR / F的引用字符串中使用行继续

时间:2018-01-08 02:06:07

标签: powershell batch-file cmd quoting

我希望能够为FOR /F循环的命令指定多行。前三(3)个命令按预期工作。但是,第四个(第4个)命令永远不会让我在引用命令中创建换行符。我已经尝试了cmd.exe行继续字符插入符号,PowerShell行继续字符反引号和组合插入符号+反引号。它似乎只是跳过第四个(第4个)FOR / F循环而没有错误或消息。

是的,我看到第四个(第四个)FOR / F循环没有超出显示器右侧的危险。我想的是我有更长的命令。创建.ps1文件是唯一的答案吗?可以继续使用线路吗?

C:>type gd.bat
@ECHO OFF
FOR /F "usebackq tokens=*" %%d IN (`powershell -NoProfile -Command "get-date -format s"`) DO (SET "DT_STAMP=%%d")
ECHO DT_STAMP 1 is %DT_STAMP%

FOR /F %%d IN ('powershell -NoProfile -Command "Get-Date -Format s"') DO (SET "DT_STAMP=%%d")
ECHO DT_STAMP 2 is %DT_STAMP%

FOR /F %%d IN ('powershell -NoProfile -Command ^
    "Get-Date -Format s"') DO (SET "DT_STAMP=%%d")
ECHO DT_STAMP 3 is %DT_STAMP%

FOR /F %%d IN ('powershell -NoProfile -Command ^
    "Get-Date ^`
        -Format s"') DO (SET "DT_STAMP=%%d")
ECHO DT_STAMP 4 is %DT_STAMP%

19:53:02.34  C:\src\t
C:>gd.bat
DT_STAMP 1 is 2018-01-07T19:53:10
DT_STAMP 2 is 2018-01-07T19:53:10
DT_STAMP 3 is 2018-01-07T19:53:10
20:01:39.37  C:\src\t
C:>echo %ERRORLEVEL%
0

1 个答案:

答案 0 :(得分:1)

您正在尝试执行cmd.exe行继续。如果引用为ON,则^没有特殊含义。您可以将"转义为^",以便^行继续有效。您还必须转义第二个引号,否则将无法识别结束)

FOR /F %%d IN ('powershell -NoProfile -Command ^
    ^"Get-Date ^
        -Format s^"') DO (SET "DT_STAMP=%%d")

请注意,换行符纯粹是装饰性的 - Powershell仍然将整个命令作为单行接收(没有任何换行符)。