1
100
首先,我将指出一些使这个问题难以完美解决的问题。然后,我将介绍我能想到的最防弹的解决方案。 对于这个讨论,我将使用小写的path来表示文件系统中的单个文件夹路径,而大写的path来表示path环境变量。 从实际的角度来看,大多数人想知道路径是否包含给定路径的逻辑等价物,而不是路径是否包含与给定路径完全匹配的字符串。这可能有问题,因为:
因此,为了可靠地检查路径是否已经包含路径,我们需要一种方法将任何给定的路径转换为规范(标准)形式。这个
问题在于
还有一些其他问题使这个问题复杂化:
9)
正常扩展在处理包含特殊字符的路径时不可靠。
10)
路径分隔符在路径名中也是有效的
杰布同时解决了第9和第10个问题 'Pretty print' windows %PATH% variable - how to split on ';' in CMD shell
所以我们可以把
函数可以这样使用(假设批处理文件名为inPath.bat):
path %path%;%newPath%
. 但第9期显示了这是多么不可靠。
这些问题通过杰布发明的一种惊人的安全返回技术得以解决: http://www.dostips.com/forum/viewtopic.php?p=6930#p6930
|
2
40
如果找不到字符串,则应为0;如果找到字符串,则应为1或更多。 编辑:添加了不区分大小写的标志,感谢Panos。 |
3
23
检查路径中是否有内容的另一种方法是执行一些无辜的可执行文件,如果它在那里就不会失败,并检查结果。 例如,下一个代码段检查 马文 在路径中:
所以我试着跑 mvn—帮助 |
4
10
在阅读了这里的答案之后,我想我可以提供一个新的观点:如果这个问题的目的是要知道
如果某个可执行文件的路径
存在于
|
5
6
它模拟了一个经典的
温德
在许多编程语言中发现的构造。
有了这个,你可以使用
|
6
4
这将查找一个精确但不区分大小写的匹配,因此请注意任何后面的反斜杠等:
请注意,此实现假定单个路径项中不存在分号或引号。 |
7
2
我用 对于 循环并将其扩展为遍历路径所有元素的内容。for循环的每次迭代都会从整个路径(保存在%q和%r中)中删除路径(%p)的第一个元素。
|
8
2
也可以使用子字符串替换来测试是否存在子字符串。在这里,我删除引号以创建路径\u NQ,然后从路径\u NQ中删除“c:\mydir”,并将其与原始路径进行比较,以查看是否有任何更改:
|
9
2
一模一样
|
10
2
如果您的问题是“为什么这个cmd脚本片段不能工作?”那么答案是
|
11
2
生成这种可以独立验证的输出
要重新组合以更新路径:
|
12
1
|
13
1
您提到,如果目录已经存在,您希望避免将其添加到搜索路径。您是打算将目录永久存储到路径中,还是只是为了批处理文件而临时存储? 如果要将目录永久添加(或删除)到路径,请查看Windows管理任务资源工具包工具中的路径管理器(pathman.exe)实用程序, http://support.microsoft.com/kb/927229 . 使用它,您可以添加或删除系统和用户路径的组件,并且它将处理诸如重复条目之类的异常情况。 如果您只需要临时修改批处理文件的路径,我只需要在路径前面添加额外的路径,因为路径中存在重复条目,因此可能会对性能造成轻微影响。 |
14
1
将目录添加到路径(如果尚未存在):
|
15
1
此演示旨在说明errorlevel逻辑:
附言
在endlocal之后,您将回到原来的路径。 |
16
1
当为路径提供空间时,它会抛出。 调用addPath“c:\Program Files(x86)\Microsoft SDK\Windows\v7.0A\Bin” “Files”未被识别为内部或外部命令, |
17
1
通常,这是将一个exe/dll放在路径上。只要此文件不会出现在其他任何地方:
|
18
1
这是凯文·爱德华兹使用字符串替换的答案的一个变体。
例如:
|
19
1
这是回报
简短,简单! |
20
1
作为一种选择:
已知问题:
|
21
0
此例程将在path变量中搜索路径\或file.ext
如果找到,则返回0。如果引用,路径\或文件可能包含空格。
如果变量作为最后一个参数传递,它将被设置为
|
22
0
要在路径不存在时添加它,我使用
|
late1 · 批处理文件未执行命令 2 年前 |
Ali EXE · 如何根据bat中命令的输出设置变量? 2 年前 |
Laureano Oliva · 如何将链接用作参数%1批处理函数? 2 年前 |
F35H · 涉及二次使用cd的错误。。在C代码中 2 年前 |