我有一个批处理脚本,其中特定文件夹中所有文件的'名称/日期修改'都写在位于%temp%
文件夹的文本文件(名为'texttoken.txt')上。写完所有文件详细信息后,每个文件将根据其“修改日期”进行文件夹复制。我注意到的是,当在包含大量文件的文件夹(即数千个)上使用脚本时,看起来脚本在写入文件的那一刻停止工作(当它只花了太长时间)。
我想要的是一个进度指示器(如条形图或百分比),显示“写入过程”的完成程度。如果失败了,就会出现一个状态字符串('loading ...'或'正在编写的文件'),只要“写入过程”就会运行。我将如何开始批量实施这些?
答案 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
在这两种情况下,不是为每个正在处理的文件打开/写入/关闭输出文件,而是将完整的循环括在括号中并重定向。
这只是一个评论。虽然这将使用户了解正在完成的过程,但不需要生成此文件。您正在编写有关文件的信息,稍后会读取相同的信息。你应该在第一个循环中进行所有处理。