Пакетный скрипт для вывода списка всех пустых подпапок в файл по указанному пути (пытается исправить ошибки "Файл не найден" и проблемы с путями)

Я пытаюсь написать пакетный скрипт, который будет перечислять все пустые подпапки для пути к файлу.

Кажется, что это в основном работает, но есть некоторые проблемы, которые я не могу понять, как исправить.

Когда я перебираю подпапки, это как-то добавляет точки в конец пути. Я полагаю, что это и есть причина того, что "Файл не найден", который он также приводит в результате.

Также, если я даю путь с пробелами, он говорит, что папка не существует. В то же время, если в указанном пути есть пробелы, а не в его дочернем каталоге, сценарий справляется с этим.

Вот сценарий:

@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

Некоторая помощь в исправлении ошибок будет принята с благодарностью!

1 ответ

Решение

Я наконец понял это!

@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

Последняя часть была немного хитрой...

Посмотрите здесь некоторые объяснения об этом:

SS64.com - Перенаправление командной строки

SS64.com - команда FINDSTR

Другие вопросы по тегам