私が考えることができる1つの方法は、他の環境変数を使用して部分パスを格納することです。たとえば、
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;
編集:別のオプションは、適切なファイルを指すファイルをbin
保持するディレクトリを作成する.bat
こと.exe
です。
編集2:別の回答へのBen Voigtのコメントは、提案されたように他の環境変数を使用%PATH%
しても、格納される前に拡張されるため、長さが短縮されない可能性があると述べています これは本当かもしれません、そして私はそれについてテストしていません。ただし、より長いディレクトリ名に8dot3形式を使用することもできます。たとえばC:\Program Files
、通常はと同等C:\PROGRA~1
です。を使用dir /x
して、短い名前を表示できます。
編集3:この簡単なテストにより、ベンフォイトが正しいと信じるようになりました。
set test1=hello
set test2=%test1%hello
set test1=bye
echo %test2%
この最後に、hellohello
ではなく出力が表示されますbyehello
。
編集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%
理想的には、実行する前に、すべての行が何を行うかを正確に知っている必要があります。