我正在尝试检查程序中定义的路径是文件还是使用批处理文件的文件夹。一切都运行正常,但是当我尝试提供一个不是文件或文件夹的路径或者没有权限访问它时,它会输出说明&#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
答案 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
注意:此方法甚至会检测您无权访问的文件夹(但不会检测此类文件)