【问题标题】:Batch file progress percentage批处理文件进度百分比
【发布时间】:2016-03-29 10:12:16
【问题描述】:

如何在 Windows 批处理 (cmd) 文件中以百分比显示长时间运行操作的进度?可以分享一些示例代码吗?

【问题讨论】:

  • 具体取决于操作是什么...
  • 同意。如果您可以将操作分解为离散的步骤,这应该很容易。有关更多信息,请参阅我的答案。

标签: windows batch-file cmd


【解决方案1】:

这里是...

注意:此代码是this 答案的略微修改版本。

@echo off

for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"

FOR /L %%n in (1,1,10) DO (
    call :show_progress %%n 10
    ping localhost -n 2 > nul
)

echo Done!
exit /b

:show_progress
setlocal EnableDelayedExpansion
set current_step=%1
set total_steps=%2
set /a "progress=(current_step * 100) / total_steps"

set /p ".=Progress: !progress!%%!CR!" <nul

if !progress! equ 100 echo.

exit /b

【讨论】:

  • 我建议声明if !progress! EQU 100 进行真正的数字比较,因为== 强制字符串比较...
  • 只是说将每个setlocalendlocal 匹配以提高可读性是一种很好的编码习惯。 @SandeepDatta 有趣的是 !cr! 将存储在变量中的回车放入输出流中,但 %cr% 没有。你知道为什么后者不起作用吗?
  • @SkipR 请参阅以下链接了解为什么有时!需要而不是 %:ss64.com/nt/delayedexpansion.html
  • 将代码更改为set /p ".=Progress: %progress%%%!CR!" &lt;nulif %progress% equ 100 echo. 没有区别 - 我认为仅在必要时才使用延迟扩展语法更清楚。
【解决方案2】:

一个例子是扫描一个大文件/数据库,显示进度而不是闪烁的光标,很长时间了!

set c=<no. of lines in file>
for /l %i in (1,1,%c%) do cls & set /p="Scanning for target ... "<nul & (set /a per=%i00/%c% >nul & echo !per!%)& ping 127.0.0.1 -n 2 > nul & REM when target found, send agents to greet
echo Complete.

括号()中的代码是进度百分比。

在 Win 10 CmD 中测试>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2019-12-04
    • 2017-12-21
    相关资源
    最近更新 更多