如何检查给定路径的目标是否是目录?
说:
rem all these should work (by X: I mean a mapped UNC path)
set somepath=some\path
set somepath=c:\some\path
set somepath=x:\some\path
set somepath=\\server\some\path
set isdir=
rem now do some extremely complicated black magic to set %isdir%
if not _%isdir%_==__ (
rem do the directory thing
)
它应该尽可能地与这些案例一起使用:
在极端情况下,例如无法告知(权限)时,后备值可以是 no,它不是目录。
答案 0 :(得分:5)
您无法使用 if 命令直接测试目录,但是 每个目录中都存在null(NUL)设备。结果,你 可以测试空设备以确定目录是否存在。 以下示例测试是否存在目录:
if exist c:\mydir\nul goto process'
对于UNC路径,我提出了:
@echo off
for /D %%I IN (%1) DO for /F "tokens=1 delims=-r" %%J IN ("%%~aI") DO if %%J==d echo %%I is a directory
将其放入批处理文件中 - 需要使用您要验证的给定对象的名称来调用它,例如: G。 myBat \\\myUncPath
。您也可以放一个通配符,然后打印出给定路径中的所有目录 - \\\myUncPath\\*
将在\\\myUncPath
注意:这应该适用于Windows 2000及更高版本,并且启用了命令扩展(不幸的是,不适用于NT4)。我在XP上测试过它。
答案 1 :(得分:2)
查看UNC路径是否存在:
set somepath=\some\path\NUL
CALL:2 "%somepath%"
GOTO:EOF
:2
PUSHD "%~dp1"
IF [%errorlevel%] == [0] (
ECHO IT EXISTS
POPD
) ELSE (
ECHO IT DOES NOT EXIST
)
如果存在,它将创建一个网络驱动器(Z,如果尚未分配),其中包含路径和CD,并返回错误级别0.如果它不存在,则命令失败,并返回错误级别为1。
如果要打破UNC路径,请使用命令POPD
答案 2 :(得分:0)
您可以检查%somepath%\NUL
是否存在:
if exist %somepath%\NUL set isdir=1
答案 3 :(得分:0)
在使用if,pushd,dir / AD等进行多次测试之后,这是我的解决方案......
@echo off
cd /d C:\
for /f "delims=" %%I in ('dir /a /ogn /b') do (
call :isdir "%%I"
if errorlevel 1 (echo F: %%~fI) else echo D: %%~fI
)
cmd/k
:isdir
echo.%~a1 | findstr /b "d" >nul
exit /b %errorlevel%
:: Errorlevel
:: 0 = folder
:: 1 = file or item not found