制作.txt时,变量会消失

时间:2013-11-30 04:03:36

标签: file batch-file

我正在编写一个批处理代码,在提示时会写一个.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%,是否有人能想到绕过这个或另一种创建文件的方法?感谢。

2 个答案:

答案 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 endeof是一个神奇的标签 - 批处理将其理解为文件结尾,因此不应在批处理中声明它。病例并不重要,但结肠是必需的。