2014-03-12 48 views
0

這是我的問題。我需要檢查某個目錄是否包含另一個隨機命名的目錄,或者只是包含任何內容,或者是空的。BATCH IF EXIST什麼都是真的,即使是空目錄

簡單如果不存在測試返回true,即使測試目錄爲空:

C:\Users\user>dir /B .\a 

C:\Users\user>if exist .\a\* echo true 
true 

據我所知,是因爲theese行:

C:\Users\user>dir /A:D .\a\ |findstr "<DIR>" 
2014-03-12 11:26 <DIR>   . 
2014-03-12 11:26 <DIR>   .. 

這些都使得目錄technicaly不空,因此我無法使用此方法來確定目錄是否包含另一個目錄。

在這裏,我用盡了想法。 那麼,有沒有一種簡單的方法來測試一個目錄是否包含另一個目錄而不知道它的名字?

感謝您的幫助。

回答

2

我找不到一個非常簡單的解決方案,但這並不算太壞。

@echo off 
setlocal 
set empty=1 
for /d %%F in (.\a\*) do set "empty=" 
if defined empty (
    echo .\a does NOT contain another folder 
) else (
    echo .\a contains another folder 
) 

也許並不需要,但它可以做多一點效率與增加的GOTO

@echo off 
setlocal 
set empty=1 
for /d %%F in (.\a\*) do set "empty="&goto :break 
:break 
if defined empty (
    echo .\a does NOT contain another folder 
) else (
    echo .\a contains another folder 
) 

編輯

我喜歡r3ap3r approach。以下是基於此的各種有用測試的列表。如果文件夾存在

測試:

if exist .\a\ (echo folder exists) else echo folder does not exist 

測試如果現有的文件夾中包含任何文件:

dir /b /a-d .\a\*|findstr . >nul&&echo folder contains files||echo folder does not contain files 

測試如果現有的文件夾中包含的文件夾:

dir /b /ad .\a\*|findstr . >nul&&echo folder contains folders||echo folder does not contain folders 

測試如果現有的文件夾空(無文件或文件夾):

dir /b /a .\a\*|findstr . >nul&&echo folder is not empty||echo folder is empty 
+0

感謝你們! r3ap3r的單線程很漂亮,但dbenham的方法可以和目錄一起工作。 再次感謝! – user3410161

+0

@ user3410161 - 我同意,r3ap34的一個班輪是優雅的。它可以輕鬆地支持查找文件夾。看到我對他的問題的評論,以及我編輯的答案。 – dbenham

2

試試這個:

@echo off 
(dir /b /a "C:\test\" | findstr .) > nul && (
    echo Not Empty 
) || (echo Empty) 
+0

+1,OP是有點不清楚,但我認爲他想知道該文件夾是否包含另一個文件夾。使用'dir/b/ad'可以完美地實現這一點。 – dbenham

0
@ECHO OFF 
SETLOCAL 
SET "emptydir=u:\q22349927" 
MD %emptydir% 
ECHO made an empty directory 
DIR /b %emptydir%|FIND /v "" >nul 
IF ERRORLEVEL 1 (ECHO %emptydir% is empty) ELSE (ECHO %emptydir% is NOT empty) 
ECHO add a directory 
MD %emptydir%\nolongerempty 
DIR /b %emptydir%|FIND /v "" >nul 
IF ERRORLEVEL 1 (ECHO %emptydir% is empty) ELSE (ECHO %emptydir% is NOT empty) 
ECHO add a file 
dir>%emptydir%\file.txt 
DIR /b %emptydir%|FIND /v "" >nul 
IF ERRORLEVEL 1 (ECHO %emptydir% is empty) ELSE (ECHO %emptydir% is NOT empty) 
ECHO remove the directory - just the file remains 
RD %emptydir%\nolongerempty 
DIR /b %emptydir%|FIND /v "" >nul 
IF ERRORLEVEL 1 (ECHO %emptydir% is empty) ELSE (ECHO %emptydir% is NOT empty) 
ECHO remove the file - nothing remains 
DEL %emptydir%\file.txt 
DIR /b %emptydir%|FIND /v "" >nul 
IF ERRORLEVEL 1 (ECHO %emptydir% is empty) ELSE (ECHO %emptydir% is NOT empty) 
RD %emptydir% 

GOTO :EOF 

這裏有一個演示向您展示如何...

相關問題