尝试使用Bat文件获取目录和子目录中所有文件的行数

时间:2019-05-24 04:32:30

标签: windows batch-file echo

我正在尝试获取这个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 :(得分:0)

@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 ,则不 输入任何内容,则该路径可能无效,否则a 可以解释以单个反斜杠开头的路径 从驱动器的根目录开始。我不认为用户可能 考虑到||是失败检查,并执行 如果失败则带括号的代码。

在继续操作之前,检查所回复的路径是否有效。

for /r循环将使用 *的模式。 find将读取每个文件,并且 stdout写入文件。与整个for /r 在括号内,允许写入所有标准输出 在关闭文件句柄之前将其归档。

最后使用type显示结果。

有关了解for /?的帮助,请参见for /r 以及所有其他类型的for循环。