我尝试了很多可能性来实现这一点,但我一直在犯错误。
我不知道为什么我无法将%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%变量中。
答案 0 :(得分:0)
for %%a in (echo "%path:;=" "%") do if /i "%cd%"=="%%a" echo "found it"
应该在大多数情况下执行此操作,但有例外。
path
可能包含无法检测到的相对路径(.
或..
)。
path
可能包含"some;directory"
,但效果不佳
并且不要求驱动名称出现在path
。
所以 - 谨慎使用。
答案 1 :(得分:0)
运行以下小例子脚本,该脚本使用带有条件的FIND
和FINDSTR
以及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答案中的方法,我们可以像
path
对于路径中的每个元素,将其解析为完整限定路径,并检查当前文件夹的完整限定路径。