【发布时间】:2018-09-05 22:15:36
【问题描述】:
我有一台运行 DOS 7.10 的旧 MS DOS 计算机(ver 命令给出:windows 98 ver 4.10.2222)。我必须制作一个基本上运行命令 10 或任何时间的批处理脚本。我尝试使用 for 命令,但它给了我 ILLEGAL Command For 所以现在我有:
@ECHO off
SET COUNT=0
:MyLoop
IF "%COUNT%" == "10" GOTO EndLoop
ECHO %COUNT%
SET /a COUNT+=1
:EndLoop
ECHO done
但是,这给了我一个 0 的无限循环,好像 set 命令不起作用。不过,该命令在 Windows 10 中的 CMD 中有效。谁能建议我做错了什么?或者一种在 DOS 7 批处理文件中实现 for 循环的方法。
【问题讨论】:
-
@JeffZeitlin - DOS 没有延迟扩展。
-
我没有要测试的 Windows 98 机器,但我相当肯定这行
set /a count+=1是问题所在。尝试将其扩展为set /a count=%count%+1 -
重读问题,我什至不确定Win98命令行是否支持SET /A; Windows XP 之前的变量——甚至可能是 in XP——总是字符串,而不是数字。我回想起那些日子,为了循环五次,我最终不得不做
FOR %I IN (1 2 3 4 5) ... -
是的,@JeffZeitlin,在 DOS 中,没有
set /A;for /L也不是。所以你必须使用for %%I in (1 2 3 ...) do,或者,如果你想使用goto循环,set "COUNT=%COUNT%_"和if "%COUNT%"=="___..."。 -
在较新的 Windows 上使用
cmd.exe作为与command.com兼容的命令解释器很容易测试批处理文件。在较新的 Windows 上使用setlocal DisableExtensions启动批处理文件,cmd.exe解释批处理文件,如command.com。cmd /?输出(大多数)受启用/禁用命令扩展影响的命令。每个受影响命令的单独帮助解释了哪些功能/选项需要启用的命令扩展。一旦批处理文件在禁用命令扩展的较新 Windows 上运行,就该在 MS-DOS 或 Windows 95/98 上对其进行测试了。
标签: batch-file dos windows-98