进度指示器/ "Loading string"



我有一个批处理脚本,其中特定文件夹中所有文件的"名称/修改日期"都写在位于%temp%文件夹的文本文件(名为"texttoken.txt")上。在写入所有文件详细信息后,每个文件都将根据其"修改日期"自动复制到文件夹中。我注意到的是,当在包含大量文件(即数千个)的文件夹上使用该脚本时,看起来该脚本在编写文件的那一刻就停止了工作(只是时间太长)。

我想要的是一个进度指标(比如条形图或百分比),显示"写作过程"完成了多少。如果失败,一个状态字符串("正在加载…"或"正在写入的文件")将与"写入过程"一样长。如何开始批量实施这些功能?

由于文件复制/移动是由robocopy完成的,并且输出没有隐藏,我假设您的代码在生成文件列表时似乎停止了

改编自您的代码

rem Get a carriage return into a variable
for /f %%a in ('copy "%~f0" nul /z') do set "CR=%%a"
set "spinner=/-|"
(
    for %%A in ("!sourcedir!*") do (
        <nul >con set /p"=Searching !spinner:~0,1!!CR!"
        set "spinner=!spinner:~1!!spinner:~0,1!"
        echo %%~tA  %%~xA %%~nA
    )
    >con echo Searching files done 
)>>"%temp%testtoken.txt" 2>nul

或者,您可以先检索文件夹中的文件数量,然后显示百分比指标

for /f %%a in ('copy "%~f0" nul /z') do set "CR=%%a"
set "numFiles=0"
for /f %%a in ('dir /a-d "!sourcedir!*" ^| findstr /b /c:"  "') do (
    if %%a gtr !numFiles! set "numFiles=%%a"
)
set "count=0"
set "oldPct=-1"
(
    for %%A in ("!sourcedir!*") do (
        set /a "count+=1"
        set /a "pct=100*count/numFiles"
        if !pct! gtr !oldPct! (
            set "oldPct=!pct!"
            >con echo Processed: !pct!!CR!%%
        )
        echo %%~tA  %%~xA %%~nA
    )
    >con echo Searching files done
)>>"%temp%testtoken.txt" 2>nul

在这两种情况下,不是为正在处理的每个文件打开/写入/关闭输出文件,而是将整个循环括在括号中并重定向。

这只是一个评论。虽然这会让用户了解正在进行的过程,但不需要生成此文件。您正在编写有关文件的信息,然后读取相同的信息。您应该在第一个循环中完成所有处理。

最新更新