进度指示器/"Loading string"

Progress indicator/"Loading string"

我有一个批处理脚本,其中 'names/date modified' 特定文件夹中的所有文件都写在位于 %temp% 文件夹中的文本文件(名为 'texttoken.txt')中。写入所有文件详细信息后,每个文件将根据 'date modified' 自动复制到文件夹。我注意到的是,当在包含大量文件(即数千个)的文件夹上使用脚本时,脚本似乎在写入文件时停止工作(当它花费太长时间时)。

我想要的是一个进度指示器(如条形图或百分比),显示 'writing process' 完成了多少。如果做不到这一点,状态字符串('loading...' 或 'files being written')将 运行 与 'writing process' 一样长。我将如何开始批量实施这些?

由于文件 copy/move 是由 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

在这两种情况下,不是 opening/writing/closing 每个正在处理的文件的输出文件,而是将完整循环括在括号中并重定向。

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