如何检查路径的目标是否是目录?

Alo*_*dal 3 windows cmd batch-file

如何检查给定路径的目标是否是目录?

说:

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
)
Run Code Online (Sandbox Code Playgroud)

它应该尽可能地与这些案例一起使用:

  • 在Windows NT上(即不是Vista +的东西).
  • UNC路径以及当地路径
  • 在路径中有空格
  • 最后有或没有尾部反斜杠
  • 万一内容无法访问

在极端情况下,例如无法告知(权限)时,后备值可以为no,它不是目录.

wmz*_*wmz 5

试试微软的这个建议:

您不能使用if命令直接测试目录,但每个目录中都存在null(NUL)设备.因此,您可以测试空设备以确定目录是否存在.以下示例测试目录是否存在:

if exist c:\mydir\nul goto process'
Run Code Online (Sandbox Code Playgroud)

对于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
Run Code Online (Sandbox Code Playgroud)

将它放在批处理文件中 - 需要使用要验证的给定对象的名称来调用它,例如myBat \\\myUncPath.你也可以放一个通配符,它​​会打印给定路径中的\\\myUncPath\\*所有目录- 将打印所有目录\\\myUncPath

注意:这应该适用于Windows 2000及更高版本,并且启用了命令扩展(不幸的是,不适用于NT4).我在XP上测试过它.