Hor*_*ter 15 windows path command-line
对于一个CMD会话,我可以轻松设置一条新路径:SET PATH=%PATH%;"insert custom path here"
在批处理文件中这样做不会考虑是否已包含自定义路径。我如何避免重复它(即检查它是否已包含在 PATH“字符串”中)。
评论:
wmz*_*wmz 18
类似于 MadHackers 的答案,只是更紧凑。
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为findstr可能误解了一些序列由KubaOber在评论中所指出
我知道它很脏,但这应该有用:
SET PATH=$(echo $PATH | awk -F"%checkstr%" '{ print ($(NF-1) ~ 0) ? $PATH:%newpath% : $PATH; }')
Run Code Online (Sandbox Code Playgroud)
其中%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
Run Code Online (Sandbox Code Playgroud)
呃,没有任何漂亮的,如果你能让管道化的 find 命令作为 if 语句中的子命令工作,那么可以作为一行完成......
| 归档时间: |
|
| 查看次数: |
16174 次 |
| 最近记录: |