1. ホーム
  2. windows

[解決済み] WindowsのPATH環境変数がいっぱいにならないようにするにはどうしたらいいですか?

2022-09-07 05:47:33

質問

システム内の実行可能ファイルを管理するために、どのようなアプローチをとっているのか知りたいです。たとえば、私はコマンドラインを通してほとんどすべてのものにアクセスできますが、現在、私はパス文字列の限界に来て、私はそれ以上のディレクトリを追加することができません。

では、どのようなものがお勧めですか? ずっと前に、私はパスに属する Dir で実行可能ファイルのソフトリンクを使用しようとしましたが、そのアプローチはうまくいきませんでした。 実行ファイルのみ"既知のDirに投げる、ほとんどすべてのアプリケーションは、ファイルのセットを必要とする問題がありますので、これも悪いです。 実行ファイルとそのすべてのファイルを既知のDirに投げる、うーんこれは動作しますが、ファイル名の衝突の可能性が非常に非常に高いです。 HardLinkを作る?あなたはどう思いますか?

どのように解決するのですか?

考えられる方法のひとつは、部分的なパスを保存するために他の環境変数を使用することです。例えば、あなたが

C:\this_is_a\long_path\that_appears\in_multiple_places\subdir1;
C:\this_is_a\long_path\that_appears\in_multiple_places\subdir2;

のような新しい環境変数を作成します。

SET P1=C:\this_is_a\long_path\that_appears\in_multiple_places

となり、元のパスは

%P1%\subdir1;
%P1%\subdir2;

EDITです。 もうひとつの方法として bin ディレクトリを作成し、その中に .bat ファイルを保持します。 .exe ファイルを指しています。

EDIT 2: Ben Voigtの他の回答へのコメントで、提案されたように他の環境変数を使用すると %PATH% の長さを減らすことはできないかもしれないと言及しています。これは本当かもしれませんし、私はそれについてテストしていません。しかし、もう一つの選択肢は、長いディレクトリ名に8dot3フォームを使用することです。 C:\Program Files は通常 C:\PROGRA~1 . あなたは dir /x を使うと、短い名前を見ることができます。

EDIT 3: この単純なテストは、Ben Voigtが正しいということを私に確信させる。

set test1=hello
set test2=%test1%hello
set test1=bye
echo %test2%

この後、次のような出力が表示されます。 hellohello ではなく byehello .

EDIT 4: バッチファイルを使用して、特定のパスを %PATH% から特定のパスを排除するためにバッチファイルを使用することにした場合、プロセスが透過的になるようにバッチファイルから実行ファイルに引数を渡す方法について心配するかもしれません(すなわち、バッチファイルを呼び出すことと実行ファイルを呼び出すことの違いに気づかないでしょう)。私はバッチ ファイルを書いた経験があまりありませんが、これは問題なく動作するようです。

@echo off

rem This batch file points to an executable of the same name
rem that is located in another directory. Specify the directory
rem here:

set actualdir=c:\this_is\an_example_path

rem You do not need to change anything that follows.

set actualfile=%0
set args=%1
:beginloop
if "%1" == "" goto endloop
shift
set args=%args% %1
goto beginloop
:endloop
%actualdir%\%actualfile% %args%

一般的なルールとして、インターネットからのバッチファイルの実行には注意が必要です。なぜなら、ハードディスクのフォーマットなど、バッチファイルを使ってあらゆることをすることができるからです。上記のコード (私が書いたもの) が信用できない場合は、次の行を置き換えることでテストできます。

%actualdir%\%actualfile% %args%

echo %actualdir%\%actualfile% %args%

理想的には、実行する前に各行が何をするのか正確に知っておくべきです。