BAT批处理文件对文件夹中的文件进行计数然后减1

Posted

技术标签:

【中文标题】BAT批处理文件对文件夹中的文件进行计数然后减1【英文标题】:BAT batch file to count files in a folder and then subtract 1 【发布时间】:2021-07-13 20:24:47 【问题描述】:

我有一个 BAT 脚本,它计算文件夹中的文件数并将结果导出到 .txt 中。它工作得很好,但我需要从当前计数的值中减去 1。我怎样才能改变我的脚本来做到这一点?

@echo off
FOR /D %%G in ("*") DO (
 PUSHD "%%G"
 FOR /F "delims=" %%H in ('dir /a-d /b * ^|find /C /V ""') DO echo %%G %%H>>"..\count.txt"
 POPD
)

【问题讨论】:

如果您有一个空目录,或者可能更多的目录只包含目录(内容不同),会发生什么? 这是可能的,因此应该满足这种情况。是否要返回 -10something else 【参考方案1】:

您的目标是使用%%HSET /A 命令来进行算术运算。我选择使用%%G 作为DIR 命令的一部分。这样您就不需要PUSHDPOPD。我还选择使用IF 命令来确保计数不为零,这样它就不会减去 1。

我在最后移动了输出的重定向,因为这会打开文件进行一次写入,而不是每次将目录写入输出时。

CALL 命令和变量上的双百分号允许我们使用该变量而无需启用延迟扩展。

@echo off
(FOR /D %%G in ("*") DO (
    FOR /F "delims=" %%H in ('dir /a-d /b "%%G\*" 2^>NUL ^|find /C /V ""') DO (
        IF NOT "%%H"=="0" SET /A "count=%%H-1"
        CALL echo %%G %%count%%
    )
))>count.txt

【讨论】:

这行得通!谢谢你。我将最后一行更改为 CALL echo %%G %%count%% ,这正是我所需要的。但是在那里有 %%H 能够向我展示它正在做的数学运算。真的很棒的崩溃。感谢您对一切的解释!我学到了很多。 @KelseyCiarrocca,只是我的一个错字。您还需要更改IF 命令。我更新了代码。

以上是关于BAT批处理文件对文件夹中的文件进行计数然后减1的主要内容,如果未能解决你的问题,请参考以下文章

Windows-执行python脚本(bat批处理)

window 命令bat语法

bat批量移除文件名中指定字符

PCB IIS日志文件定时清除批处理

OC中的拷贝(copy)

BAT批处理如何对大量文件夹进行批量RAR分卷压缩