进度指示器/"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 每个正在处理的文件的输出文件,而是将完整循环括在括号中并重定向。
这只是一条评论。虽然这将使用户了解正在完成的过程,但不需要生成此文件。您正在编写有关文件的信息,稍后会读取相同的信息。您应该在第一个循环中完成所有处理。
我有一个批处理脚本,其中 '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 每个正在处理的文件的输出文件,而是将完整循环括在括号中并重定向。
这只是一条评论。虽然这将使用户了解正在完成的过程,但不需要生成此文件。您正在编写有关文件的信息,稍后会读取相同的信息。您应该在第一个循环中完成所有处理。