如何在一行中获取 Windows 批处理文件输出中的 PowerShell 命令和命令 ECHO 的输出?

How to get output of a PowerShell command and of command ECHO in Windows batch file output on one line?

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

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

预期结果为:2021-05-09 12:00:00Hello 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 格式的日期和时间以及命令 ECHO 在 Windows 批处理文件输出中的输出一行?

在 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实例运行s powershell.exe获取本地日期时间并以指定格式输出。为处理后台命令进程的 STDOUT(标准输出)而编写的 PowerShell 输出由正在处理批处理文件的命令进程捕获,并在启动后处理 cmd.exe 自行终止通过 cmd 内部命令 FOR.

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

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

另请参阅以下答案:

  • Time is set incorrectly after midnight
  • How do I get current date/time on the Windows command line in a suitable format for usage in a file/folder name?

你当然可以这样做:

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"