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

如何在Windows批处理文件输出中一行获取PowerShell命令和命令ECHO的输出?,powershell,datetime,batch-file,cmd,echo,Powershell,Datetime,Batch File,Cmd,Echo,以下命令行在Windows批处理文件中不起作用: Powershell.exe -Command Get-Date -Format 'yyyy-MM-dd HH:mm:ss' echo "Hello World" 预期结果是:2021-05-09 12:00:00世界你好 但是PowerShell会输出错误消息: Get-Date : Cannot bind parameter 'Date'. Cannot convert value "echo" to

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

Powershell.exe -Command Get-Date -Format 'yyyy-MM-dd HH:mm:ss' echo "Hello World"
预期结果是:2021-05-09 12:00:00世界你好

但是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
Get Date:无法绑定参数“Date”。无法将值“echo”转换为类型“System.DateTime”。
错误:“该字符串未被识别为有效的DateTime。有一个从索引0开始的未知单词。”
第1行字符:9

+Get Date在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
,并且在命令集中为指定的命令行作为附加参数。第二个
cmd.exe
实例运行
powershell.exe
获取本地日期时间,并以指定格式输出。为处理后台命令进程的STDOUT(标准输出)而写入的PowerShell的此输出由正在处理批处理文件的命令进程捕获,并在启动
cmd.exe
后由
的cmd内部命令终止

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

打开,运行
获取/?
,然后从第一页的顶部到最后一页的底部仔细完整地阅读输出帮助

另请参见以下内容的答案:


在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
,并且在命令集中为指定的命令行作为附加参数。第二个
cmd.exe
实例运行
powershell.exe
获取本地日期时间,并以指定格式输出。为处理后台命令进程的STDOUT(标准输出)而写入的PowerShell的此输出由正在处理批处理文件的命令进程捕获,并在启动
cmd.exe
后由
的cmd内部命令终止

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

打开,运行
获取/?
,然后从第一页的顶部到最后一页的底部仔细完整地阅读输出帮助

另请参见以下内容的答案:


    • 你当然可以这样做:

      PowerShell写入主机(获取日期).ToString('yyyy-MM-dd HH:MM:ss')Hello World
      
      尽管如此,由于这是一个预先编写的批处理文件,我建议您使用完整路径和更可读、更易懂的语法:

      %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe-NoProfile-NoLogo-Command“写入主机(获取日期).ToString('yyyyy-MM-dd HH:MM:ss')Hello World”
      
      您当然可以这样做:

      PowerShell写入主机(获取日期).ToString('yyyy-MM-dd HH:MM:ss')Hello World
      
      尽管如此,由于这是一个预先编写的批处理文件,我建议您使用完整路径和更可读、更易懂的语法:

      %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe-NoProfile-NoLogo-Command“写入主机(获取日期).ToString('yyyyy-MM-dd HH:MM:ss')Hello World”
      
      这是否回答了您的问题?不,没有。在这个命令中,我在cmd中调用了Powershell命令。但同时,我还需要使用ECHO命令。问题是如何将两个命令组合成一行?我不知道添加什么语法或参数来实现它。这能回答你的问题吗?不,没有。在这个命令中,我在cmd中调用了Powershell命令。但同时,我还需要使用ECHO命令。问题是如何将两个命令组合成一行?我不知道添加什么语法或参数来实现它。在我看来,你的答案更符合这个问题,因为OP不要求在env变量中检索日期,而是要求在批处理echo命令的输出旁边显示日期。为什么不使用诸如Powershell.exe命令Get Date-Format'yyyyy-MM-dd HH:MM:ss'^ Write Host-NoNewline&echo“Hello World”
?TBF,有很多方法可以在@Zilog80实现它,但对我来说,这是不太基本的,尤其是对于OP的示例,我不希望这是一个关于如何使用PowerShell的答案。在我看来,您的答案更适合这个问题,因为OP不要求在env变量中检索日期,而是要求在批处理echo命令的输出旁边显示日期。为什么不使用诸如Powershell.exe命令Get Date-Format'yyyyy-MM-dd HH:MM:ss'^ Write Host-NoNewline&echo“Hello World”
?TBF,有很多方法可以在@Zilog80实现它,但对我来说,这是不太基本的,尤其是对于OP的示例,我不希望这成为关于如何使用PowerShell的答案。