进度指示器/"加载字符串"

时间:2015-03-31 05:45:30

标签: batch-file loading batch-processing progress-indicator

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

我想要的是一个进度指示器(如条形图或百分比),显示“写入过程”的完成程度。如果失败了,就会出现一个状态字符串('loading ...'或'正在编写的文件'),只要“写入过程”就会运行。我将如何开始批量实施这些?

1 个答案:

答案 0 :(得分:0)

由于文件复制/移动是由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

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

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