3

不能仅通过比较这些变量来检查:

C:\>set "d1=C:\"
C:\>set "d2=C:\Windows\.."
C:\>if %d1%==%d2% (echo true) else (echo false)
false

我可以用pushdpopd和其他变量组成一个复杂的结构,但没有更简单的方法吗?

4

3 回答 3

5

您可以使用一个小函数对变量进行标准化。

set d1=C:\
set d2=C:\Windows\..
call :normalize d1
call :normalize d2
if "%d1%"=="%d2%" (echo true) else (echo false)
exit /b

:normalize
setlocal EnableDelayedExpansion
for /F "delims=" %%M in ("!%1!") do (
    endlocal
    set "%1=%%~dpM"
)
exit /b
于 2013-02-09T17:08:04.683 回答
4

类似于 jeb 的解决方案,但使用 FOR 而不是被调用的子程序

for %%A in ("%d1%") do for %%B in ("%d2%") do if "%%~fA"=="%%~fB" (echo true) else (echo false)
于 2013-02-09T20:14:20.840 回答
1

不知道它是否适合您的需要,但您可以在第一个目录上创建一个文件,然后检查它是否存在于第二个目录中:

echo test > %d1%\checkthisfile.txt
if exist %d2%\checkthisfile.txt (echo true)
于 2013-02-09T15:44:51.320 回答