我有一个 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"