本文介绍了如何从字面上回应输出重定向标记(>;>;)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在创建一个BAT文件,该文件将为我编写一个脚本,该脚本将被另一个BAT调用。
我写的:
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我想要这样的输出:
@echo off open 127.0.0.1 user USER PASS prompt n ascii lcd C: mget FILE1 echo FILE1>>C:Downloaded_Files.txt" mget FILE2 echo FILE2>>C:Downloaded_Files.txt bye 我在下面的主题中找到了类似的内容: Why gives my script an other output with the echo command?我不知道如何管理该变量。 提前感谢您的帮助。
推荐答案我建议使用此批处理代码:
@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的值时退出循环。
首先将输出行赋给用双引号括起来的变量,以将>>解释为字符串,并使用延迟展开并重定向到文件来输出此变量的值。
有关variable=value使用双引号的原因,请同时阅读Why is no string output with 'echo %var%' after using 'set var = text' on command line?的答案。
另请参阅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用于在当前命令进程环境中启用命令扩展时提示用户输入值。
更多推荐
如何从字面上回应输出重定向标记(>;>;)?
发布评论