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

问题描述 投票:0回答:2

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

powershell datetime batch-file cmd echo
2个回答
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

处理批处理文件的 Windows 命令处理器

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

输出行按原样分配给循环变量

I
,因为使用
delims=
定义字符串分隔符的空列表,并且该行不以分号(默认的行结束符)开头。分配给循环变量
I
的字符串值通过命令 ECHO 与文本一起输出,以处理正在处理批处理文件的命令进程的 STDOUT

打开命令提示符,运行

for /?
并从第一页顶部到最后一页底部仔细完整地阅读输出帮助。

另请参阅以下答案:


3
投票

你当然可以这样做:

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"
© www.soinside.com 2019 - 2024. All rights reserved.