如何从字面上回应输出重定向标记(>;>;)? [英] How to echo output redirection mark (>>) literally?
本文介绍了如何从字面上回应输出重定向标记(>;>;)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在创建一个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
用于在当前命令进程环境中启用命令扩展时提示用户输入值。
这篇关于如何从字面上回应输出重定向标记(>;>;)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文