当前目录是否存在于%PATH%中?

时间:2017-10-14 09:14:08

标签: windows batch-file cmd

我尝试了很多可能性来实现这一点,但我一直在犯错误。

我不知道为什么我无法将%CD%%PATH%传递给FINDSTR

@echo off
findstr %cd% %path%
echo %errorlevel%
pause

结果findstr无法从%path%获取值,因为它不是文件,因此我尝试echo将其存档。

@echo off
echo %path% > path.txt
findstr %cd% path.txt
echo %errorlevel%
pause

现在findstr可以打开path.txt,但无法获取要比较的字符串。 %cd%似乎没有效果,所以我试着像这样手动设置:

@echo off
echo %path% > path.txt
findstr c:\foo path.txt
echo %errorlevel%
pause

有效!

那么如何获取当前目录值并将值传递给findstr?或者更明显地,我如何检测当前目录是否存在于%PATH%变量中。

3 个答案:

答案 0 :(得分:0)

for %%a in (echo "%path:;=" "%") do if /i "%cd%"=="%%a" echo "found it"

应该在大多数情况下执行此操作,但有例外。

path 可能包含无法检测到的相对路径(...)。

path 可能包含"some;directory",但效果不佳

并且不要求驱动名称出现在path

所以 - 谨慎使用。

答案 1 :(得分:0)

运行以下小例子脚本,该脚本使用带有条件的FINDFINDSTR以及IF / ELSE

@Echo Off
Echo(%PATH%|Find/I "%CD%;">Nul&&(Echo(Found)||Echo(Not Found
Timeout 2
Echo(%PATH%|FindStr/I "%CD%;">Nul&&(Echo(Found)||Echo(Not Found
Timeout 2
SetLocal EnableDelayedExpansion
If /I "!PATH:%CD%;=!"=="!PATH!" (Echo(Not Found) Else Echo(Found
EndLocal
Timeout -1

这是同一项任务的三次不同尝试,它们如何为您服务?

答案 2 :(得分:0)

没有任何通用,简单,直接的方法来检查当前文件夹是否包含在使用path的{​​{1}}变量中,因为对于findstr内的每个引用文件夹:它可以是绝对或相对引用,它可以包括或不包含结尾反斜杠,它可以是或不引用,它可以包含或不包含特殊字符,它可以包括(如果引用)分号,...

除此之外,为了使用path进行检查,您需要处理反斜杠字符的问题,因为它们在正则表达式中用作转义字符,但在前面的非字母数字时也用在文字中字符。尝试

findstr

因此,您需要处理echo x:\_uno\ | findstr /L /c:"x:\_uno" && echo Yes || echo No 变量中的每个值,处理引号分号,特殊字符,反斜杠,......

幸运的是,这已由Jeb中的dbenham'Pretty print' windows %PATH% variable - how to split on ';' in CMD shell解决。使用他们的代码来枚举path变量的元素,以及这个问题的Magoo's答案中的方法,我们可以像

一样编写somenthing
path

对于路径中的每个元素,将其解析为完整限定路径,并检查当前文件夹的完整限定路径。