在 DOS 6.22 上循环 n 次

在 DOS 6.22 上循环 n 次

FOR /L %%parameter IN (start,step,end) DO command不适用于DOS 6.22

循环/L遍历一组数字的参数在 中不可用DOS 6.22

FOR只能DOS 6.22循环遍历一组文件。有内置工具可以解决这个问题吗?


在 *nix 系统上这对我来说不是什么大问题,但我尝试在装有 Win 3.1 和 DOS 6.22 的复古笔记本电脑上执行此操作,如问题所述:

使用内置工具安全地擦除 Win 3.1 / DOS 6.22 系统上的空闲磁盘空间

答案1

你可以构建自己的 INC.BAT 并像下面这样使用它

测试脚本

@echo off
set count=0
:loop
call inc.bat %count% count
echo %count%
if not %count%==15 goto :loop

INC.BAT

@echo off

for %%L in (%0) do if "%%L"=="/" goto %1

REM Split and reverse number into _valueRev
set _remain=%1
set _valueRev=

:split_loop
set _loop=1

for %%a in (/%_remain%) do call %0// :split %1 %%a
if NOT "%_remain%"=="" goto :split_loop
goto :increment

:split
if %_loop%==2 goto :split_2
set _loop=2
set _remain=
set _valueRev=%3,%_valueRev%
goto :eof

:split_2
set _remain=%3
goto :eof

REM The main increment function
:increment
set _result=
set _carry=1
for %%d in (%_valueRev%) do call %0// :incDig %%d
if not "%_carry%"=="" call %0// :incDig 0

if NOT "%2"=="" set %2=%_result%
echo %_result%
REM Clear temp vars
FOR %%v in (_result _carry _loop _valueRev _valueRev_comma _digit _remain) do set %%v=
goto :eof

:incDig
set _digit=%2
if "%_carry%"=="" goto :endinc
set _carry=
if %2==9 set _digit=0
if %2==9 set _carry=1
if %2==8 set _digit=9
if %2==7 set _digit=8
if %2==6 set _digit=7
if %2==5 set _digit=6
if %2==4 set _digit=5
if %2==3 set _digit=4
if %2==2 set _digit=3
if %2==1 set _digit=2
if %2==0 set _digit=1

:endinc
set _result=%_digit%%_result%
:eof

相关内容