1つのCMD
セッションで、新しいパスを簡単に設定できます:SET PATH=%PATH%;"insert custom path here"
バッチファイルでこれを行うと、カスタムパスがすでに含まれているかどうかは考慮されません。重複を避けるにはどうすればよいですか(つまり、PATHの「文字列」にすでに含まれているかどうかを確認してください)。
備考:
MaddHackersの回答と同様に、よりコンパクトです。echo %path%|find /i "%np%">nul || set path=%path%;%np%
%np%
は新しいパスです。もちろん、代わりにリテラルを使用できます。機能:echo %path%|find /i "%np%">nul
既存のパスで文字列を検索し、出力を破棄します。 ||
は失敗時に実行することを意味するため、次のことを意味します。追加する文字列のパスを検索し、見つからない場合は追加します。
編集:通常、パスを引用する必要はありません。スペースが含まれている場合でも、引用したい場合、このバージョンは二重引用符で囲まれたパスで機能します。echo %path%|find /i "%np:"=%">nul || set path=%path%;%np%
編集:変更されたfindstr /i /c:
からfind /i
as findstr
は、KubaOberがコメントで指摘しているように、一部のシーケンスを誤って解釈する可能性があります
私はそれが汚れていることを知っていますが、これはうまくいくはずです:
SET PATH=$(echo $PATH | awk -F"%checkstr%" '{ print ($(NF-1) ~ 0) ? $PATH:%newpath% : $PATH; }')
どこ %checkstr%
は、PATHで確認する文字列であり、%newpath%
は、現在のPATHに追加する新しいPATHです。
それが役に立てば幸い、そしてもっと簡単な方法があると確信していますが、今のところそれでうまくいくでしょう.
編集
したがって、UNIXツールをWindowsに追加したくない場合は、次のバッチ構文を試すことができます。
echo %PATH% | find /C /I "<string to find>" > out.txt
set /p dne= < out.txt
if 0 EQU %dne% (set PATH=%PATH%;"<custom path>")
del out.txt
うーん、きれいではありません。パイプされたfindコマンドをifステートメントのサブコマンドとして機能させることができれば、1行で実行できます...
「wmz」による回答に基づくスクリプト:
@ECHO off
ECHO Java_home=%Java_HOME%
SET javapath=%Java_HOME%\bin
ECHO %path%|findstr /i /c:"%javapath:"=%">nul || set path=%path%;%javapath%
ECHO Path=%path%
PAUSE