2017-04-10 155 views
2

我試圖將值返回給我的批處理腳本。 在PowerShell中這個腳本工作正常:從cmd調用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% 

我在做什麼錯?

+0

*「我有一個錯誤」*所以,它說什麼? –

+0

另外:我想不出爲什麼你會嘗試從批處理中做到這一點的任何理由? – bluuf

+0

我有一個很大的批處理腳本,我只需要一個powershell調用。也許以後我會把劇本改寫成PowerShell。 – Antiokh

回答

4

爲了避免需要逃逸單引號使用useback parameter.Put一切都在雙引號,以避免需要轉義括號的(和記-UFormat也接受的格式單引號):

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

謝謝,這也有幫助 – Antiokh

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% 
+2

逗號是批處理文件中的標準分隔符,只要'','',',';'和'='需要在for循環中轉義。 – npocmaka

+0

要改寫@ npocmaka的有用評論:所有提到的字符都用作_argument分隔符_。 – mklement0