2017-12-23 17 views
0

プログラムで定義されたパスがバッチファイルを使用しているフォルダかどうかを確認しようとしています。すべて正常に動作していますが、ファイルやフォルダではないパスを指定しようとしたり、アクセス権がない場合は、「ファイルです」と出力されます。パスがバッチを使用してファイルまたはフォルダであることを確認してください

ここにコードがあります。

@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

可能な複製を[パスがファイルまたはディレクトリであるかどうかをテストする方法Windowsのバッチファイル?](https://stackoverflow.com/questions/8666225/how-to-test-if-a-path-is-a-file-or-directory-in-windows-batch-file) – Squashman

答えて

1

私は次の方法を示唆している:あなたの問題は論理1である

@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

を:それはフォルダの場合は、チェックし、それは、ファイルの場合は、チェックしないので、あなた「フォルダ」または「フォルダではない」のいずれかを持つ"ファイル"の別のチェックが必要です。しかし、 "見つからない"と判断すると言語に依存しますが、一般的に避けるべきです。ここでは、言語に依存しないソリューションは、次のとおりです。

forはすべてattibutesがなくてもattrib、(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 

注:この方法でも、あなたがアクセス権を持たないフォルダを、検出した(しかし、そのようなファイルが検出されない)の

関連する問題