必要な日付を必要な形式で返すのに非常にうまく機能する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日水曜日17:19:34
ありがとう
だから私は自分で先に進んだのかもしれません。これは私が以前持っていたものであり、日付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
バッチスクリプト内のPowerShellスクリプトロジックを一時的なPS1
ファイルにパイプすることで、説明どおりにこれを機能させることができました。 、次に FOR/F ループを使用して、実行されたPowerShellスクリプトの結果を取得し、から日数を減算します。その中の現在の日付を保存し、その結果を変数として保存して、後で必要に応じてバッチスクリプトで使用します(%leaf%
)。
PowerShell-format "%%Y%%m%%d"
のパーセント記号を2倍にして、これらの記号が特殊文字ではなくリテラル文字として使用されるようにする必要があることに注意してください。バッチスクリプト。
パーセントのエスケープ
%文字は、コマンドラインパラメーターとFORパラメーターに対して特別な意味を持ちます。
パーセントを通常の文字として扱うには、2倍にします。
%%
@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
ここで受けたすべてのヘルプによると、以下のロジックは私の特定のニーズにうまく機能しているように見えました。
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"