我正在编写一个批处理代码,在提示时会写一个.bat
文件。这是我用来创建.bat
:
echo set /a num=0 >>%fileinfo%.bat
echo :repeat1 >>%fileinfo%.bat
echo set /a num=%num% +1 >>%fileinfo%.bat
echo echo %num% >>%fileinfo%.bat
echo if %num%==100 goto end >>%fileinfo%.bat
echo goto repeat1 >>%fileinfo%.bat
这是原始代码:
set /a num=0
:repeat1
set /a num=%num% +1
echo %num%
if %num%==100 goto end
goto repeat1
当我运行代码并创建新的.bat时会发生什么:
set /a num=0
:repeat1
set /a num= +1
echo
if ==100 goto end
goto repeat1
它取出了%num%
,是否有人能想到绕过这个或另一种创建文件的方法?感谢。
答案 0 :(得分:0)
echo set /a num=0 >>%fileinfo%.bat
echo :repeat1 >>%fileinfo%.bat
echo set /a num=%%num%% +1 >>%fileinfo%.bat
echo echo %%num%% >>%fileinfo%.bat
echo if %%num%%==100 goto end >>%fileinfo%.bat
echo goto repeat1 >>%fileinfo%.bat
答案 1 :(得分:0)
@ECHO OFF
SETLOCAL
SET "fileinfo=q20296357x"
(
echo set /a num=0
echo :repeat1
echo set /a num=%%num%% +1
echo echo %%num%%
echo if %%num%%==100 goto end
echo goto repeat1
)>>%fileinfo%.bat
TYPE %fileinfo%.bat
GOTO :EOF
您的根本问题是在执行该行之前%var%
被var
的内容替换。对于某些具有特殊含义的字符,如重定向器> | < ,您需要在特殊字符前加上 ^ 。
奇怪的是,要“逃避”%,转义字符不是 ^ 而是%本身 - 所以每个字面值%< / kbd>需要编码为% %
请注意如何通过括号ECHO
并重定向到目标文件来压缩代码。
另请注意,如果您确实想要转到文件结尾,也可以代码...goto :EOF
代替...goto end
。 eof
是一个神奇的标签 - 批处理将其理解为文件结尾,因此不应在批处理中声明它。病例并不重要,但结肠是必需的。