[解決済み] WindowsのPATH環境変数がいっぱいにならないようにするにはどうしたらいいですか?
質問
システム内の実行可能ファイルを管理するために、どのようなアプローチをとっているのか知りたいです。たとえば、私はコマンドラインを通してほとんどすべてのものにアクセスできますが、現在、私はパス文字列の限界に来て、私はそれ以上のディレクトリを追加することができません。
では、どのようなものがお勧めですか? ずっと前に、私はパスに属する 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%
理想的には、実行する前に各行が何をするのか正確に知っておくべきです。
関連
-
[解決済み] 環境変数の値にアクセスする方法
-
[解決済み] エクスポートされた環境変数を削除する方法を教えてください。
-
[解決済み] Pythonでパスから拡張子なしでファイル名を取得する方法は?
-
[解決済み] WindowsのPATH環境変数にディレクトリを追加する
-
[解決済み] Windowsのコマンドプロンプトから環境変数を更新するコマンドはありますか?
-
[解決済み] Windowsのコマンドライン環境を使って、ファイル内のテキストを検索・置換するにはどうすればよいですか?
-
[解決済み] Windowsにはなぜ260文字というパスの長さの制限があるのですか?
-
[解決済み】WindowsでTCPまたはUDPポートをリッスンしているプロセスを見つけるにはどうすればよいですか?
-
[解決済み] git が case の変更を無視するようにするには?
-
[解決済み] WindowsでJenkinsのサービスを開始/停止/再起動する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SetTimer(タイマー)のいくつかの使い方
-
.appref-msのファイル拡張子について
-
[解決済み] CMDがAdministratorとして実行されているか、または昇格した特権を持っているかどうかを検出する方法は?
-
[解決済み] Windows XP以降のWindowsです。ウィンドウを表示せず、バックグラウンドでバッチファイルを実行するには?
-
[解決済み] Visual Studioのコードターミナルで、管理者権限でコマンドを実行するには?
-
[解決済み] WindowsのコマンドラインからGit Bashを起動するには?
-
[解決済み] 行末を保持する
-
[解決済み] hostednetworkを起動できない
-
[解決済み] Windowsのコマンドプロンプトでlsを作成する方法は?
-
[解決済み] Windows の 'tail' コマンドに相当するもの [重複]。