【发布时间】:2016-03-29 10:12:16
【问题描述】:
如何在 Windows 批处理 (cmd) 文件中以百分比显示长时间运行操作的进度?可以分享一些示例代码吗?
【问题讨论】:
-
具体取决于操作是什么...
-
同意。如果您可以将操作分解为离散的步骤,这应该很容易。有关更多信息,请参阅我的答案。
标签: windows batch-file cmd
如何在 Windows 批处理 (cmd) 文件中以百分比显示长时间运行操作的进度?可以分享一些示例代码吗?
【问题讨论】:
标签: windows batch-file cmd
这里是...
注意:此代码是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 进行真正的数字比较,因为== 强制字符串比较...
setlocal 与endlocal 匹配以提高可读性是一种很好的编码习惯。 @SandeepDatta 有趣的是 !cr! 将存储在变量中的回车放入输出流中,但 %cr% 没有。你知道为什么后者不起作用吗?
set /p ".=Progress: %progress%%%!CR!" <nul 和if %progress% equ 100 echo. 没有区别 - 我认为仅在必要时才使用延迟扩展语法更清楚。
一个例子是扫描一个大文件/数据库,显示进度而不是闪烁的光标,很长时间了!
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 中测试>
【讨论】: