Пакетный скрипт для вывода списка всех пустых подпапок в файл по указанному пути (пытается исправить ошибки "Файл не найден" и проблемы с путями)
Я пытаюсь написать пакетный скрипт, который будет перечислять все пустые подпапки для пути к файлу.
Кажется, что это в основном работает, но есть некоторые проблемы, которые я не могу понять, как исправить.
Когда я перебираю подпапки, это как-то добавляет точки в конец пути. Я полагаю, что это и есть причина того, что "Файл не найден", который он также приводит в результате.
Также, если я даю путь с пробелами, он говорит, что папка не существует. В то же время, если в указанном пути есть пробелы, а не в его дочернем каталоге, сценарий справляется с этим.
Вот сценарий:
@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
Последняя часть была немного хитрой...
Посмотрите здесь некоторые объяснения об этом: