在批处理文件中返回 PowerShell 命令结果

在批处理文件中返回 PowerShell 命令结果

我有一个 powershell 命令,它可以很好地以我需要的格式返回我想要的日期。我无法在批处理文件中调用此命令以在单独的脚本中使用。

C:\Users\xxx>powershell-command(get-date((get-date).addDays(-1))-uformat“%Y%m%d”)20171115

虽然日期格式不是我想要的,但这似乎有效:

set "psCommand=powershell -command "(get-date((get-date).addDays(-1)))""
for /f "delims=" %%I in ('%psCommand%') do set "leaf=%%I"
echo %leaf% >> uploadsp.txt

输出为:2017 年 11 月 15 日星期三下午 5:19:34

谢谢

所以我可能自己已经领先了。这是我以前所拥有的,我只是试图将其更改为获取 date-1。

echo @echo off > uploadsp.txt
set mydate=%date:~10,4%%date:~4,2%%date:~7,2%
echo set mydate=%date:~10,4%%date:~4,2%%date:~7,2% >> uploadsp.txt

set myfile=Epic_DSH360144_Drug_Utilization_%mydate%_DU.txt
echo put %myfile% >> uploadsp.txt
exit

答案1

我能够按照你描述的预期工作,方法是将电源外壳将批处理脚本中的脚本逻辑复制到临时文件中PS1,然后使用为/F循环获取执行的结果电源外壳脚本从其中的当前日期中减去天数,然后将该结果保存为变量,以便在批处理脚本中满足您的需要(%leaf%)。

请注意,我必须将百分号加倍电源外壳 -format "%%Y%%m%%d"确保这些符号被批处理脚本用作文字字符而不是特殊字符。

转义百分号

% 字符对于命令行参数和 FOR 参数具有特殊含义。

要将百分比视为常规字符,请将其加倍:

%%

转义符、分隔符和引号


批处理脚本

@ECHO ON

:DynamicPSScriptBuild
SET PSScript=%temp%\~tmp%~n0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO get-date((get-date).addDays(-1)) -uformat "%%Y%%m%%d">>"%PSScript%"

FOR /F "DELIMS=" %%I IN ('Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"') DO SET "leaf=%%I"
echo %leaf% >> uploadsp.txt
EXIT

更多资源

答案2

根据这里收到的所有帮助,下面的逻辑似乎很适合我的特定需求:

For /F "delims=" %%G In ('PowerShell -Command "&{((Get-Date).AddDays(-1)).ToString('yyyyMMdd')}"') Do Set "yesterday=%%G"    
For /F "delims=" %%Y In ('PowerShell -Command "&{((Get-Date).AddDays(-2)).ToString('yyyyMMdd')}"') Do Set "daybefore=%%Y"

相关内容