在 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
)
对于您发布的特定任务,此脚本有点过头了,但我尝试将其创建得更像一个模板,以便您可以更轻松地将其调整为类似的任务,(通过更改行4
和5
上的变量值,并根据需要修改内部For /F
循环中的Tokens
和Delims
值)。
【讨论】:
【参考方案2】:在互联网搜索中找到了这个简单的结果: 在对主文件夹执行 dir /s 然后使用 FIND "File(s)" 导出每个文件结果的文件 (Files.txt) 后,以下命令仅提取该文件的最后一行,其中包含所有子文件夹中的文件总数.....
对于 /F "UseBackQ Delims==" %%A In ("Files.txt") 设置 "lastline=%%A" 回声 - %lastline%
效果很好, 谢谢,
【讨论】:
以上是关于在 Windows 10 批处理文件中,有没有办法只提取最后的总文件数?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法从 IBM 大型机批处理程序中的第 10 条记录开始读取 ESDS 文件?