2016-06-05 17 views
0

Ich versuche, ein Batch-Skript zu schreiben, das alle leeren Unterordner für den Pfad zu einer Datei aufgelistet .Stapelskript zum Auflisten aller leeren Unterordner für den angegebenen Pfad (versucht, Datei Not Found Fehler und Pfadprobleme zu beheben)

Es scheint hauptsächlich zu funktionieren, aber es gibt einige Probleme, die ich nicht herausfinden kann, wie man repariert.

Wenn ich Unterordner durchlaufe, fügt es irgendwie Punkte am Ende des Pfades hinzu. Ich glaube, das ist der Grund für die "Datei nicht gefunden" gibt es auch als Ergebnis.

Auch wenn ich einen Pfad mit Leerzeichen gebe, heißt es, dass der Ordner nicht existiert. Wenn es Leerzeichen gibt, die sich nicht im angegebenen Pfad, sondern in seinem untergeordneten Verzeichnis befinden, wird das Skript vom Skript gut verarbeitet. Hier

ist das Skript:

@Echo off 

setlocal disableDelayedExpansion 

IF EXIST List.txt del /F List.txt 

::No path given 
set "root=%~1" 
echo Path given: %root% 
if not defined root (
    echo No path given! 
    GOTO:EOF 
) 

::The folder does not exist 
if exist %root%\* (
echo: 
) else (
    echo No such folder! 
    GOTO:EOF 
) 

::Is folder empty? 
echo Is folder empty? 
FOR /R "%root%" %%G in (.) DO (
    set "folder=%%G" 
    call :testFILE 
) 
GOTO:EOF 

:testFILE 
for /F %%i in ('dir /b /A-D "%folder%\*"') do exit /b 
REM if you're here, directory has no files 
echo %folder% has no files 
call :testDIR 
exit /b 

:testDIR 
for /F %%i in ('dir /b /A:D "%folder%\*"') do exit /b 
REM if you're here, directory has no directories 
echo "%folder%" is totally empty >> List.txt 
exit /b 

Einige helfen mit, die Fehler Festsetzung wäre sehr dankbar!

Antwort

0

Ich habe es endlich herausgefunden!

@echo off 

setlocal disableDelayedExpansion 

if exist List.txt del /F List.txt 

::No path given 
set "root=%~1" 
if not defined root (
    echo: 
    echo No path given! 
    GOTO:EOF 
) 

::The folder does not exist 
if exist %root%\* (
GOTO write_path 
) else (
    echo: 
    echo No such folder! 
    GOTO:EOF 
) 

:write_path 
::Write the given path 
echo: 
echo Path given: %root% 

::Is folder empty? 
for /D /r "%root%" %%D in (.) do (
    dir /A /B "%%~fD" 2>nul | findstr "^" >nul || echo %%~fD >> List.txt 
) 
GOTO:EOF 

Der letzte Teil war ein bisschen schwierig ...

Schauen Sie sich hier für einige Erklärungen dazu:

SS64.com - Command Line Redirection

SS64.com - FINDSTR Command