web-dev-qa-db-ja.com

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日水曜日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
1
irshan syed

バッチスクリプト内の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

その他のリソース

0
Pimp Juice IT

ここで受けたすべてのヘルプによると、以下のロジックは私の特定のニーズにうまく機能しているように見えました。

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"
0
irshan syed