Попытка получить количество строк для всех файлов в каталоге и подкаталогах с использованием файла Bat - PullRequest
1 голос
/ 24 мая 2019

Я пытаюсь получить этот bat-файл, над которым я работаю, чтобы предоставить мне список документов в каталоге (и во всех подкаталогах) и количество строк в документе.

У меня естьЯ смог получить приведенный ниже код для работы, но он предоставляет мне только документы в корне папки, а не подкаталоги.Я искал так много разных форумов, но не смог найти работоспособного ответа.

@echo off

:start
cls
echo Enter full path to directory that you want to count files for:
set /P FilePath=
echo ..
echo ...
if exist %FilePath%\CountLines.csv del %FilePath%\CountLines.csv /q
for /f "usebackq delims=" %%a in (`find /v /c "" "%FilePath%"\*.*`) do echo %%a >> "%FilePath%"\CountLines.csv
pause()
goto start

Это вывод, который я получаю, который является правильным, но он не возвращает документы в подкаталогах

MD5HASH APPEARS ONCE.csv 1174690 
Split.txt 4258 
COUNTLINESINFILES.txt 1 

1 Ответ

0 голосов
/ 25 мая 2019
@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 петель.

...