[Environment]::SetEnvironmentVariable
Danが提案したようにPowerShellから環境変数を設定することは無意味だと思います。一時的な「プロセス」コンテキストを選択した場合、またはバッチファイルの環境内にまだない場合、PowerShellの終了時に変数のコンテンツが失われるためです永続的な「マシン」または「ユーザー」コンテキストを選択した場合-つまり、スクリプト全体がPowerShellで記述されていない限り、そもそも問題は発生しません。
C:\Users\myuser> echo %DOW%
%DOW%
C:\Users\myuser> powershell
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. Alle Rechte vorbehalten.
PS C:\Users\myuser> $dow = (get-date).dayofweek
PS C:\Users\myuser> [Environment]::SetEnvironmentVariable("DOW", $dow, "User")
PS C:\Users\myuser> [Environment]::SetEnvironmentVariable("DOW", $dow, "Process")
PS C:\Users\myuser> exit
C:\Users\myuser> echo %DOW%
%DOW%
C:\Users\myuser>
このfor
コマンドを回避策として使用して、PowerShellコマンドの出力を解析し、変数に入れることができます。
for /F "usebackq tokens=1" %%i in (`powershell ^(get-date^).dayofweek`) do set DOW=%%i
^
PowerShell呼び出し内の括弧の特殊文字をエスケープするために使用されるキャレット文字に注意してください。
バッチファイルコンテキスト内ではなく、コマンドラインからテストする場合は、%%
before変数の参照を%
次のように置き換える必要があります。
C:\Users\myuser> for /F "usebackq tokens=1" %i in (`powershell ^(get-date^).dayofw
eek`) do set DOW=%i
C:\Users\myuser> set DOW=Friday
C:\Users\myuser>