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\nRun Code Online (Sandbox Code Playgroud)\n如您所见,我当前输入十一个命令(复制/粘贴然后修改每一行)来创建进度条的进度。
\n我更喜欢有一个循环,将条形的宽度调整为循环的次数,然后在每个循环中用一个块替换最左边的空间。它可以让我在任何长度的等待中重复使用它,甚至可以显示我不想充斥屏幕的批处理进程的进度,而无需每次都进行大量修改。
\n不幸的是,老实说我对批处理不是很了解;我知道足够多的东西可以与一些 Google-Fu 一起破解,但是我的搜索词并没有给我带来好的结果,而且我不确定我正在尝试做的事情是否可行。任何帮助,即使只是一个起点,都将不胜感激。
\n\n
我不确定我是否理解你的问题,但这里有一个基于子字符串和for /l循环的建议:
@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 :eofRun Code Online (Sandbox Code Playgroud)\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 :eofRun Code Online (Sandbox Code Playgroud)\n