我正在创建一个bat文件,它会写一个将被另一个bat调用的脚本。
我写的:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="form-group">
<label for="brutto">Brutto</label>
<input class="form-control" readonly="readonly" name="brutto" type="text" id="brutto">
</div>
<div class="form-group">
<label for="tax">Taxes 19%</label>
<input class="form-control" readonly="readonly" name="tax" type="text" id="tax">
</div>
<div class="form-group">
<label for="netto">Netto</label>
<input class="form-control" name="netto" type="text" id="netto">
</div>
我的问题出在echo @echo off>>myscript-NTRE_TN_F
echo open 127.0.0.1>>myscript-NTRE_TN_F
echo user USER PASS>>myscript-NTRE_TN_F
echo prompt n>>myscript-NTRE_TN_F
echo ascii>>myscript-NTRE_TN_F
echo lcd C:\>>myscript-NTRE_TN_F
SET MAX_FILES=200
SET /S FILE_COUNT=0
for /F "usebackq tokens=1,2 delims=," %%a IN ("C:\filelist-NTRE_TN_F.txt") DO (
IF !FILE_COUNT! LSS %MAX_FILES% (
echo mget %%a>>myscript-NTRE_TN_F
echo echo %%a>>C:\Downloaded_Files.txt>>myscript-NTRE_TN_F
)
SET /A FILE_COUNT+=1
)
echo bye>>myscript-NTRE_TN_F
部分
我现在的输出是:
echo echo %%a
我想要一个这样的输出:
@echo off
open 127.0.0.1
user USER PASS
prompt n
ascii
lcd C:\
mget FILE1
echo FILE1
mget FILE2
echo FILE2
bye
我在这里找到了类似的主题: Why gives my script an other output with the echo command?
我不知道如何管理变量 在此先感谢您的帮助。
答案 0 :(得分:2)
(实施例)
echo echo %%a^>^>C:\Downloaded_Files.txt>>myscript-NTRE_TN_F
插入符号^
表示字面上会再现以下字符。
答案 1 :(得分:1)
我建议使用这个批处理代码:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "ScriptFile=myscript-NTRE_TN_F"
>"%ScriptFile%" echo @echo off
>>"%ScriptFile%" echo open 127.0.0.1
>>"%ScriptFile%" echo user USER PASS
>>"%ScriptFile%" echo prompt n
>>"%ScriptFile%" echo ascii
>>"%ScriptFile%" echo lcd C:\
SET "MAX_FILES=200"
SET "FILE_COUNT=0"
for /F "usebackq tokens=1,2 delims=," %%a IN ("C:\filelist-NTRE_TN_F.txt") DO (
IF !FILE_COUNT! GEQ %MAX_FILES% goto Finish
>>"%ScriptFile%" echo mget %%a
set "ScriptLine=>>C:\Downloaded_Files.txt echo %%a"
>>"%ScriptFile%" echo !ScriptLine!
SET /A FILE_COUNT+=1
)
:Finish
>>"%ScriptFile%" echo bye
endlocal
重定向操作符也可以放在一行的开头,这样可以更容易地读取写入文件的内容。
在 FOR 循环内, IF 条件更改为在达到MAX_FILES
的值时退出循环。
要输出的行首先分配给用双引号括起来的变量,以便将>>
解释为字符串,并使用延迟扩展输出此变量的值,并重定向到文件。
请阅读Why is no string output with 'echo %var%' after using 'set var = text' on command line?上的答案,了解为何在variable=value
附近使用双引号的原因。
另请参阅Microsoft文章Using command redirection operators
另一个更好的解决方案是:
@echo on
setlocal EnableExtensions EnableDelayedExpansion
set "ScriptFile=myscript-NTRE_TN_F"
(
echo @echo off
echo open 127.0.0.1
echo user USER PASS
echo prompt n
echo ascii
echo lcd C:\
)>"%ScriptFile%"
SET "MAX_FILES=200"
SET "FILE_COUNT=0"
for /F "usebackq tokens=1,2 delims=," %%a IN ("C:\filelist-NTRE_TN_F.txt") DO (
IF !FILE_COUNT! GEQ %MAX_FILES% goto Finish
echo mget %%a
set "ScriptLine=>>C:\Downloaded_Files.txt echo %%a"
echo !ScriptLine!
SET /A FILE_COUNT+=1
)>>"%ScriptFile%"
:Finish
echo bye>>"%ScriptFile%"
endlocal
两个命令块中输出到 STDOUT 的所有行都被重定向到脚本文件中以进行创建。
顺便说一下:SET /S FILE_COUNT=0
导致执行错误消息
该命令的语法不正确。
命令 SET 不支持选项/S
,只有/A
用于算术表达式,/P
用于提示用户输入值,如果启用了命令扩展名在当前的命令处理环境中。