在 Windows 10 批处理文件中,有没有办法只提取最后的总文件数?

Posted

技术标签:

【中文标题】在 Windows 10 批处理文件中,有没有办法只提取最后的总文件数?【英文标题】:In a Windows 10 batch file, is there a way to extract only the last total files count? 【发布时间】:2021-10-12 16:02:58 【问题描述】:

从在主文件夹中显示多个子文件夹的 dir 命令中,我试图仅提取文件总数。我正在尝试使用带有字符串“File(s)”的 FIND 命令,但是除了最后一行的总总数之外,它还列出了每个子文件夹的所有文件总数。我想将我的提取限制为仅这个总数,并且不计算任何子文件夹文件。

【问题讨论】:

dir /s /b /ad * |find /c /v "" %SystemRoot%\System32\xcopy.exe "MainFolder\*" "Null" /G/H/I/L/Q/R/S 【参考方案1】:

虽然我已经在评论部分提供了一个简单的衬里,但从技术上讲,它并没有提供一种方法来做你想做的事。您解释的任务实际上是从带有/S 选项的DIR 命令检索最后一行输出的子字符串。此方法也无需使用FIND 命令来搜索语言相关字符串File(s)

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion

Set "MainFolder=C:\Users\CoastalGuy\Documents"
Set "CommandLine=Dir "%MainFolder%" /S /A:-D"

Set "Last="
Set "LastButOne="
For /F Delims^=^ EOL^= %%G In (
    '%CommandLine% 2^>NUL'
) Do (
    If Defined Last (
        SetLocal EnableDelayedExpansion
        For /F "Tokens=1 Delims= " %%H In ("!Last!") Do (
            EndLocal
            Set "LastButOne=%%H"
        )
    )
    Set "Last=%%G"
)
If Defined LastButOne (
    Echo %LastButOne%
    Pause
)

对于您发布的特定任务,此脚本有点过头了,但我尝试将其创建得更像一个模板,以便您可以更轻松地将其调整为类似的任务,(通过更改行45 上的变量值,并根据需要修改内部For /F 循环中的TokensDelims 值)

【讨论】:

【参考方案2】:

在互联网搜索中找到了这个简单的结果: 在对主文件夹执行 dir /s 然后使用 FIND "File(s)" 导出每个文件结果的文件 (Files.txt) 后,以下命令仅提取该文件的最后一行,其中包含所有子文件夹中的文件总数.....

对于 /F "UseBackQ Delims==" %%A In ("Files.txt") 设置 "lastline=%%A" 回声 - %lastline%

效果很好, 谢谢,

【讨论】:

以上是关于在 Windows 10 批处理文件中,有没有办法只提取最后的总文件数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在批处理文件中附加日期

如果...或如果...在 Windows 批处理文件中

有没有办法从 IBM 大型机批处理程序中的第 10 条记录开始读取 ESDS 文件?

win10提示防火墙没有法更改某些设置的处理办法

有没有办法通过ANT或其他一些构建自动化系统自动生成JWG文件/编译Openscript文件?

如何在与windows批处理文件相同的目录中执行程序?