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

use*_*272 1 powershell datetime cmd batch-file echo

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

Powershell.exe -Command Get-Date -Format 'yyyy-MM-dd HH:mm:ss' echo "Hello World"
Run Code Online (Sandbox Code Playgroud)

预期结果为: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
Run Code Online (Sandbox Code Playgroud)

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

Mof*_*ofi 5

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

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

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

打开命令提示符,运行for /?并从第一页的顶部到最后一页的底部仔细完整地阅读输出帮助。

另请参阅有关以下内容的答案: