以下命令行在 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%\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 /?
并从第一页顶部到最后一页底部仔细完整地阅读输出帮助。
另请参阅以下答案:
你当然可以这样做:
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"