【问题标题】:How to get output of a PowerShell command and of command ECHO in Windows batch file output on one line?如何在一行的 Windows 批处理文件输出中获取 PowerShell 命令和命令 ECHO 的输出?
【发布时间】:2021-05-09 08:08:59
【问题描述】:

以下命令行在 Windows 批处理文件中不起作用:

Powershell.exe -Command Get-Date -Format 'yyyy-MM-dd HH:mm:ss' echo "Hello World"

预期结果是:2021-05-09 12:00:00 Hello World

但是 PowerShell 输出错误信息:

Get-Date : Cannot bind parameter 'Date'. Cannot convert value "echo" to type "System.DateTime".
Error: "The string was not recognized as a valid DateTime. There is a unknown word starting at index 0."
At line:1 char:9
+ Get-Date <<<<  -Format 'yyyy-MM-dd HH:mm:ss' echo Hello World
    + CategoryInfo          : InvalidArgument: (:) [Get-Date], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.GetDateCommand

如何获取PowerShell命令的输出以获取yyyy-MM-dd HH:mm:ss格式的日期和时间以及Windows批处理文件输出中的命令ECHO的输出?

【问题讨论】:

  • 这能回答你的问题吗? Batch Echo Style: two statements into same line
  • 没有。它没有。在这个命令中,我在 cmd 中调用了 Powershell 命令。但同时,我也需要使用 ECHO 命令。问题是如何将两个命令组合成一行?我不知道添加什么语法或参数来实现它。

标签: powershell datetime batch-file cmd echo


【解决方案1】:

在 Windows 批处理文件中使用的命令行是:

@for /F "usebackq delims=" %%I in (`%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -NoLogo -Command Get-Date -Format 'yyyy-MM-dd HH:mm:ss'`) do @echo %%I Hello World

Windows 命令处理器cmd.exe 处理批处理文件在后台启动另一个cmd.exe,选项/c 和在命令集FOR 中指定的命令行作为附加参数。第二个cmd.exe 实例运行powershell.exe 以获取本地日期时间并以指定格式输出。为处理后台命令进程的 STDOUT(标准输出)而编写的 PowerShell 输出由处理批处理文件的命令进程捕获,并在启动 cmd.exe 后由 cmd 内部命令自行终止

输出行按原样分配给循环变量I,因为使用delims=定义了一个空的字符串分隔符列表,并且该行不以分号开头,这是默认的行尾特点。分配给循环变量I 的字符串值由命令ECHO 与文本一起输出,以处理处理批处理文件的命令进程的STDOUT

打开command prompt,运行for /?,然后从第一页顶部到最后一页底部仔细完整地阅读输出帮助。

另见答案:

【讨论】:

    【解决方案2】:

    你当然可以这样做:

    PowerShell Write-Host (Get-Date).ToString('yyyy-MM-dd HH:mm:ss') Hello World
    

    虽然这是来自预先编写的批处理文件,但我建议您使用完整路径和更易读易懂的语法:

    %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -NoLogo -Command "Write-Host (Get-Date).ToString('yyyy-MM-dd HH:mm:ss') Hello World"
    

    【讨论】:

    • 在我看来,您的答案更适合这个问题,因为 OP 不要求检索环境变量中的日期,而是在批处理回显命令的输出旁边显示日期。为什么不使用像Powershell.exe -Command Get-Date -Format 'yyyy-MM-dd HH:mm:ss' ^| Write-Host -NoNewline &amp; echo "Hello World" 这样的“转义”方式?
    • TBF,有很多方法可以实现它@Zilog80,但对我来说,这不太基本,特别是对于OP的例子,我不希望这是关于如何使用的答案PowerShell。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多