@echo off
setlocal
echo Enter full path to directory that you want to count files for:
rem Get path of the directory to search.
set /P "FilePath=" || (
>&2 echo Invalid reply.
exit /b 1
)
rem Check if the dir path exists.
if not exist "%FilePath%\" (
>&2 echo Invalid path.
exit /b 1
)
echo ..
echo ...
rem Get count of lines of files in the dir path.
(
for /r "%FilePath%" %%A in (*) do (
find /v /c "" "%%~A"
)
) > "%FilePath%\CountLines.csv"
echo Results:
type "%FilePath%\CountLines.csv"
pause
Если переменные задаются в скрипте, setlocal
может помочь сохранить переменные локальными для скрипта.setlocal
было добавлено.
Учтите, что если пользователь нажимает return , не вводя ничего, то это может быть неверный путь, иначе путь, начинающийся с одиночной обратной косой черты, можно интерпретировать какот корня диска.Я не считаю, что пользователь может считать, что ||
является проверкой на сбой и выполняет код в скобках, если это сбой.
Прежде чем продолжить, проверьте, является ли указанный путь допустимым.
Цикл for /r
будет рекурсивно повторяться с шаблоном *
.find
будет читать каждый файл, и стандартный вывод записывается в файл.С целым for /r
в круглых скобках позволяет записать весь стандартный вывод в файл перед закрытием дескриптора файла.
Результаты отображаются в конце с помощью type
.
См. for /?
за помощь в понимании for /r
и всех других типов for
петель.