Batch file 在windows批处理文件中计算/处理“查找”输出

Batch file 在windows批处理文件中计算/处理“查找”输出,batch-file,Batch File,我试图输出一个文件count.txt,其中包含当前目录中每个csv和tab文件的名称以及该文件中的行数。尽管选项卡文件需要其值除以4。另外,我想去掉10个破折号的“find”输出,也许可以修改文件名。我该如何抓住它,找到并操纵它 del count.txt for %%f in (*.csv) do ( find /c /v "" %%f >> count.txt ) for %%f in (*.tab) do ( ::need to

我试图输出一个文件count.txt,其中包含当前目录中每个csv和tab文件的名称以及该文件中的行数。尽管选项卡文件需要其值除以4。另外,我想去掉10个破折号的“find”输出,也许可以修改文件名。我该如何抓住它,找到并操纵它

    del count.txt
    for %%f in (*.csv) do (
        find /c /v "" %%f >> count.txt
    )
    for %%f in (*.tab) do (
 ::need to divide the next value by 4
        find /c /v "" %%f >> count.txt
    )
编辑以更正错误并适应评论

@回音 setlocal enableextensions disabledelayedexpansion rem定义要处理的扩展 设置扩展=.tab.csv rem为每个扩展定义分隔符 set.tab=4 set.csv=1 rem从命令行检索起始文件夹 rem如果不存在,则假定为当前文件夹 set root=%1&如果未定义root set root=%cd% 从指定根目录开始的每个文件夹的rem rem更改要处理的文件夹的当前路径,并 列表中每个扩展名的rem%%X 对于find命令处理的每个匹配文件/行号,rem%%a/%%b rem计算行数 rem回波文件信息 rem返回上一个active directory 对于/r%root%/d%%F in。做 pushd%%~fF&& 对于%%X(在%extensions%中),如果存在,请执行。\*%%~X 对于/f标记=2,3 delims=\:%%a in' 查找/c/v.\*%~X 2^>nul ”“是吗 set/a numLines=%%b/%%~xa setlocal enabledelayedexpansion 换成%%c英寸!努姆林!做 端部 回声[%%~fa][%%c] 邻苯二胺 >count.txt 其中,每个for循环的任务是

%%F将从指定的起点递归文件夹层次结构

%%X将遍历要处理的扩展列表

%%a将对所有指定的文件执行find命令,并使用反斜杠和冒号拆分每一行。“查找”命令的输出中包含斜杠,因为我们对每个文件使用相对引用。\*.csv。这样可以删除初始破折号和空格。然后使用冒号将文件名与行数分开。最后,%%a将保存文件名,%%b将保存行数

一旦我们有了所需的元素,我们将需要延迟扩展活动来访问计算结果。文件扩展名用于使用为每种情况定义的变量确定分隔符

%%如果延迟扩展处于活动状态,则会导致包含!这是它的名称,因此我们需要在执行echo之前禁用endlocal延迟扩展,因此使用一个aditional for命令来保存需要进行echo的行数的值。禁用延迟扩展后,将回显信息


外部for循环用括号括起来,因此我们可以重定向所有输出,只打开输出文件一次,而不是对每个文件执行一次打开/写入操作。

这里有很多好东西。非常感谢。我没有提到的一点是,目录可能不包含这两种文件类型,并且如果每个文件中至少没有一个文件,那么它似乎什么也不输出。简单地用'>>count.txt'而不是'>count.txt'为每种文件类型复制'for'循环就可以实现这一点。是否可以轻松搜索所有子目录?@flysher,通过文件扩展名上的传统循环查找丢失文件的行为。另外,一个传统的循环将处理文件夹递归。答案已更新。