从cmd调用powershell命令时出错

时间:2017-04-10 12:46:08

标签: powershell batch-file

我试图将值返回到我的批处理脚本。 在powershell中,这个脚本运行正常:

PS> (Get-Date -Date "9.04.2017" -Uformat "%w.%Y-%m-%d").Replace("0.", "7.")
7.2017-04-09

当我从批处理尝试时:

for /f %%a in ('powershell ^(Get-Date -Uformat "%%w.%%Y-%%m-%%d"^).Replace^(^'0.^', ^'7.^'^)') do set datestamp=%%a
echo %datestamp%

我收到错误,但这个脚本运行正常:

for /f %%a in ('powershell ^(get-date^).DayOfWeek') do set weekday=%%a
for /f %%a in ('powershell Get-Date -Uformat "%%u.%weekday%.%%Y-%%m-%%d"') do set datestamp=%%a
echo %datestamp%

我做错了什么?

2 个答案:

答案 0 :(得分:4)

为了避免需要转义单引号,请使用useback参数。将所有内容放在双引号中以避免需要转义括号(并且请注意-UFormat也接受格式的单引号):

for /f "usebackq" %%a in (`"powershell (Get-Date -Uformat '%%w.%%Y-%%m-%%d').Replace('0.', '7.')"`) do set datestamp=%%a
echo %datestamp%

答案 1 :(得分:2)

我发现了自己的错误。我需要逃脱逗号字符。 现在它看起来很奇怪,但有效。

for /f %%a in ('powershell ^(Get-Date  -Date "9.04.2017" -Uformat "%%w.%%Y-%%m-%%d"^).Replace^(^'0.^'^,^'7.^'^)') do set datestamp=%%a
echo %datestamp%