1 つのセッションでCMD
新しいパスを簡単に設定できます。SET PATH=%PATH%;"insert custom path here"
バッチ ファイルでこれを行うと、カスタム パスがすでに含まれているかどうかは考慮されません。重複を回避するにはどうすればよいでしょうか (つまり、PATH "文字列" にすでに含まれているかどうかを確認します)。
備考:
- 関連している:Windows 7 でユーザー定義の環境変数をシステム変数 PATH に追加するにはどうすればよいですか?
- 関連している:コマンドライン経由でシステムの PATH 変数にエントリを永続的に追加するにはどうすればよいですか?
- UNIX についても同じ質問です:ディレクトリがまだ存在しない場合は$PATHに追加します
- いくつかの「CMD」文字列操作について説明します。http://ss64.com/nt/syntax-replace.html
答え1
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%
編集:コメントでKubaOberが指摘したように、いくつかのシーケンスを誤解する可能性があるようfindstr /i /c:
に変更しましたfind /i
findstr
答え2
汚いのは分かっていますが、これでうまくいくはずです:
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 行で実行できます...
答え3
「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
答え4
2021 年に更新された回答:
set
はもう機能しないので、setx
(少し異なる構文)を使用する必要があります。
SET mypath=C:\dev\vendor\sass\1.32.4
ECHO %Path%|findstr /i /c:"%mypath:"=%">nul || setx Path "%Path%";%mypath%