0

「C:\WINDOWS\system32」が PATH 環境変数の一部であることに非常に合理的に依存するバッチ スクリプトを作成しています。最近、system32 を含まない非常に奇妙なパスを持つ (開発者の) マシンに遭遇したため、バッチ スクリプトが機能しませんでした。

バッチ スクリプトで PATH 変数をチェックし、そこにない場合は system32 を追加する方法を調べました。ただし、私が見つけた解決策は、setx皮肉なことにALSOがPATH変数のsystem32に依存するものです。system32 を PATH に追加せずにプログラムで追加する方法はありますか?

また、これが極端なケースであり、スクリプトを堅牢にする意味がない場合はお知らせください。私の典型的なユーザーがこのような壊れた PATH 変数を持っているとは思っていません。気にする必要がありますか?

4

2 に答える 2

0
@ECHO OFF
SETLOCAL
SET "required=c:\windows\system32"

for %%p in ("%path:;=" "%") do (
 FOR %%j IN ("" \) DO (
  IF /i %%p=="%required%%%~j" GOTO :nextstep
 )
)

SETx PATH "%required%;%path%"
:nextstep

ECHO PATH=%path%

GOTO :EOF

ここに問題に対する私の見解があります。PATH必要なディレクトリには、末尾\に が付いている場合と付いていない場合があります。また、前または末尾に;

SETXただし、動作を確認することをお勧めします。CURRENT または EXISTING セッション、AFAIAA ではなく、将来の cmd セッションの環境変数を設定します。おそらく、PATHまたはその他の変数ではありません (上記のバッチでPATHを使用して設定しようとしSETXました - 将来のセッションは新しい値セットを取得しませんでした、しかし、それに従って設定されているように見えましたregedit32-おそらく再起動が必要です-この段階ではさらに調査していません)

%path%私の観察が裏付けられた場合、上記には必要なディレクトリを追加する必要があることに注意してください...

于 2013-08-08T14:34:18.643 に答える