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

以下命令行在 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 的输出?

回答

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

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

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

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

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

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

  • 午夜后时间设置不正确
  • 如何以合适的格式在 Windows 命令行上获取当前日期/时间以用于文件/文件夹名称?

以上是如何在一行中获取Windows批处理文件输出中的PowerShell命令和命令ECHO的输出?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>