代码之家  ›  专栏  ›  技术社区  ›  Ebad Ali

使用batch[复制]检查路径是否为文件或文件夹

  •  3
  • Ebad Ali  · 技术社区  · 7 年前

    我试图检查程序中定义的路径是文件还是使用批处理文件的文件夹。一切正常,但当我试图给出一个不是文件或文件夹的路径或没有访问权限的路径时,它会给出输出,说“这是一个文件”。

    这是代码。

    @ECHO off
    SETLOCAL ENABLEEXTENSIONS
    set ATTR=D:\Download\Documents\New
    
    
    dir /AD "%ATTR%" 2>&1 | findstr /C:"Not Found">NUL:&&(goto IsFile)||(goto IsDir)
    
    :IsFile
      echo %ATTR% is a file
      goto done
    
    :IsDir
      echo %ATTR% is a directory
      goto done
    
    :done
    
    2 回复  |  直到 4 年前
        1
  •  3
  •   Compo    7 年前

    我建议采用以下方法:

    @Echo Off
    Set "ATTR=D:\Download\Documents\New"
    For %%Z In ("%ATTR%") Do If "%%~aZ" GEq "d" (Echo Directory
    ) Else If "%%~aZ" GEq "-" (Echo File) Else Echo Inaccessible
    Pause
    
        2
  •  2
  •   Stephan    7 年前

    你的问题是合乎逻辑的:你检查它是否是一个文件夹,但你不检查它是否是一个文件,所以你有“文件夹”或“不是文件夹”。您需要再次检查“文件”。但发现“未找到”会使其依赖于语言,这通常应该避免。以下是一个独立于语言的解决方案:

    for 列出所有姿态(有 D irecotry属性),甚至 attrib 不。

    @echo off
    break>Existing.File
    md ExistingFolder
    
    set "attr=Existing.File"
    REM set "attr=ExistingFolder"
    REM set "attr=does not exist"
    
    for /f %%x in ("%attr%") do set attrib=%%~ax/
    set "attrib=%attrib:~0,1%"
    if "%attrib%"=="d" echo %attr% is a directory
    if "%attrib%"=="-" echo %attr% is a file
    if "%attrib%"=="/" echo %attr% does not exist
    

    注意:此方法甚至检测到您无权访问的文件夹(但未检测到此类文件)