增加Windows10批处理文件中的进度条

use*_*820 3 batch command-line

我摘录了我正在使用的批处理文件的一部分。我正在尝试制作进度条,而不是超时输出的数字计数。

\n

我的问题是,如何在循环中动态修改字符串,而不必重新输入字符串的每一步?

\n\n
@echo off\n\nsetlocal enabledelayedexpansion\n\n:: This is to set variables that represent backspace and carriage return.   \n:: I begin strings with these, instead of ending strings with only CR,\n:: so that the cursor isn\'t flashing under the first character of the     \n:: progress bar. Beginning each string with a space, and ending each \n:: with !CR! only is another possible workaround.\n\nfor /f %%a in (\'copy /Z "%~dpf0" nul\') do set "CR=%%a"\nfor /f %%a in (\'"prompt $H&for %%b in (0) do rem"\') do set "BS=%%a"\n\n<nul set /p"=        [          ]" & Timeout /t 1 >nul\n<nul set /p"=!BS!!CR![\xe2\x96\xa0         ]" & Timeout /t 1 >nul\n<nul set /p"=!BS!!CR![\xe2\x96\xa0\xe2\x96\xa0        ]" & Timeout /t 1 >nul\n<nul set /p"=!BS!!CR![\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0       ]" & Timeout /t 1 >nul\n<nul set /p"=!BS!!CR![\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0      ]" & Timeout /t 1 >nul\n<nul set /p"=!BS!!CR![\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0     ]" & Timeout /t 1 >nul\n<nul set /p"=!BS!!CR![\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0    ]" & Timeout /t 1 >nul\n<nul set /p"=!BS!!CR![\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0   ]" & Timeout /t 1 >nul\n<nul set /p"=!BS!!CR![\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0  ]" & Timeout /t 1 >nul\n<nul set /p"=!BS!!CR![\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0 ]" & Timeout /t 1 >nul\n<nul set /p"=!BS!!CR![\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0]" & Timeout /t 1 >nul\n
Run Code Online (Sandbox Code Playgroud)\n

如您所见,我当前输入十一个命令(复制/粘贴然后修改每一行)来创建进度条的进度。

\n

我更喜欢有一个循环,将条形的宽度调整为循环的次数,然后在每个循环中用一个块替换最左边的空间。它可以让我在任何长度的等待中重复使用它,甚至可以显示我不想充斥屏幕的批处理进程的进度,而无需每次都进行大量修改。

\n

不幸的是,老实说我对批处理不是很了解;我知道足够多的东西可以与一些 Google-Fu 一起破解,但是我的搜索词并没有给我带来好的结果,而且我不确定我正在尝试做的事情是否可行。任何帮助,即使只是一个起点,都将不胜感激。

\n

It *_* Me 5

\n

我不确定我是否理解你的问题,但这里有一个基于子字符串和for /l循环的建议:

\n
@echo off\n\n>nul chcp 65001\nset "_spc=          "\nset "_bar=\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0"\n\nsetlocal enabledelayedexpansion\n\nfor /f %%a in (\'copy /Z "%~dpf0" nul\')do for /f skip^=4 %%b in (\'echo;prompt;$H^|cmd\')do set "BS=%%~b" & set "CR=%%a"\nfor /l %%L in (1 1 10)do <con: set /p "\'= !CR!!BS!!CR![!_bar:~0,%%~L!!BS!!_spc:~%%~L!] " <nul & >nul timeout.exe /t 1\n\nendlocal & goto :eof
Run Code Online (Sandbox Code Playgroud)\n
\n
    \n
  • 或者一些像:
  • \n
\n

在此输入图像描述

\n
@echo off \n\n>nul chcp 65001 \nsetlocal enabledelayedexpansion\n\nset "_spc=          "\nset "_bar=\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0\xe2\x96\xa0" \nset "_msg= Progress bar loop."\n<con: color 0A & mode 70,4 & echo\\ \n\nfor /f %%a in (\'copy/Z "%~dpf0" nul\')do for /f skip^=4 %%b in (\'echo;prompt;$H^|cmd\')do set "BS=%%b" & set "CR=%%a"\nfor /l %%L in (1 1 10)do <con: set/p "\'=!CR!!BS!!CR![!_bar:~0,%%~L!!BS!!_spc:~%%L!]!_msg!"<nul & >nul timeout.exe 1\n\nendlocal & color & goto :eof
Run Code Online (Sandbox Code Playgroud)\n
\n

其他资源:

\n\n