使用批处理检查路径是文件还是文件夹

时间:2017-12-23 16:24:07

标签: windows batch-file

我正在尝试检查程序中定义的路径是文件还是使用批处理文件的文件夹。一切都运行正常,但是当我尝试提供一个不是文件或文件夹的路径或者没有权限访问它时,它会输出说明&#34;它是一个文件&#34;。< / p>

这是代码。

@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 个答案:

答案 0 :(得分:2)

我建议采用以下方法:

@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

答案 1 :(得分:1)

您的问题是合乎逻辑的:您检查,如果它是文件夹,但您不检查,如果它是文件,那么您有“文件夹”或“不是文件夹”。您需要另一个检查“文件”。但是找到“未找到”会使其依赖于语言,这通常应该避免。这是一个独立于语言的解决方案:

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

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