如何从字面上回应输出重定向标记(>>)?

编程入门 行业动态 更新时间:2024-10-28 11:21:56
本文介绍了如何从字面上回应输出重定向标记(>>)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在创建一个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用于在当前命令进程环境中启用命令扩展时提示用户输入值。

更多推荐

如何从字面上回应输出重定向标记(>>)?

本文发布于:2023-11-23 11:03:46,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1621219.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字面   标记   重定向   gt   amp

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!