2017-12-23 15 views
0

프로그램에 정의 된 경로가 배치 파일을 사용하는 폴더인지 확인하려고합니다. 모든 것이 잘 작동하지만 파일이나 폴더가 아니거나 액세스 권한이없는 경로를 제공하려고하면 "파일"이라고 출력됩니다.경로가 일괄 처리를 사용하는 파일 또는 폴더인지 확인하십시오.

다음은 코드입니다.

@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 
+0

가능한 복제를 [경로가 파일이나 디렉토리의 경우 테스트하는 방법 in Windows 배치 파일?] (https://stackoverflow.com/questions/8666225/how-to-test-if-a-path-is-a-file-or-directory-in-windows-batch-file) – Squashman

답변

1

나는 다음과 같은 방법 제안이 폴더의 경우, 확인을하지만 파일의 경우, 그래서 당신은 확인하지 않습니다 "폴더"또는 "폴더가 아님"중 하나가 있어야합니다. "파일"에 대한 다른 검사가 필요합니다. 그러나 "발견되지 않음"을 발견하면 언어에 의존하게되므로 일반적으로 피해야합니다. 다음은 언어 독립적 인 솔루션입니다 :

for 모든 attibutes하지 않는 경우에도 attrib (A D irecotry 속성이) 목록을 수행합니다.

@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 

참고 :이 방법은 심지어 당신이 액세스 할 수없는 폴더를 감지 (그러나 이러한 파일을 검색하지 않습니다)의

1

귀하의 문제가 논리적 인 하나입니다 :

@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