Windows 如何使用从txt文件中读取的变量使用批处理输出文本块?

Windows 如何使用从txt文件中读取的变量使用批处理输出文本块?,windows,batch-file,Windows,Batch File,TIA寻求任何帮助或建议 我需要将超过10k的连接字符串导入MTPuTTY,唯一的方法是使用xml导入函数 我有一个connectionstrings.txt,它有一个所有字符串的列表,我将在每个文本块中多次使用每个值作为条目 因此strings.txt文件如下所示: username1@servername1 username1@servername2 username2@servername1 username2@servername2 等 批处理文件应该将它们中的每一个作为变量,并在将块

TIA寻求任何帮助或建议

我需要将超过10k的连接字符串导入MTPuTTY,唯一的方法是使用xml导入函数

我有一个connectionstrings.txt,它有一个所有字符串的列表,我将在每个文本块中多次使用每个值作为条目

因此strings.txt文件如下所示:

username1@servername1 username1@servername2 username2@servername1 username2@servername2 等

批处理文件应该将它们中的每一个作为变量,并在将块输出到xml之前将它们输入到块中

标准块应该是这样的

<Node Type="1">
            <SavedSession>username1@servername1 <SavedSession>
            <DisplayName>username1@servername1 </DisplayName>
            <ServerName>username1@servername1 </ServerName>
            <PuttyConType>0</PuttyConType>
            <Port>22</Port>
            <UserName></UserName>
            <Password></Password>
            <PasswordDelay>0</PasswordDelay>
            <CLParams>-load username1@servername1  "username1@servername1 " -P 22</CLParams>
            <ScriptDelay>0</ScriptDelay> ) 

username1@servername1 
username1@servername1 
username1@servername1 
0
22
0
-装载username1@servername1  "username1@servername1“-第22页
0 ) 
到目前为止,我尝试使用%%I作为变量编译一个IF语句,并用它构建块,但我得到了各种错误,例如Echo出乎意料。我想我很愚蠢,缺少基本语法

FOR /F %%i in (connection strings.txt) echo ( 

 <Node Type="1">
            <SavedSession>%%i</SavedSession>
            <DisplayName>%%i</DisplayName>
            <ServerName>%%i</ServerName>
            <PuttyConType>0</PuttyConType>
            <Port>22</Port>
            <UserName></UserName>
            <Password></Password>
            <PasswordDelay>0</PasswordDelay>
            <CLParams>-load %%i "%%i" -P 22</CLParams>
            <ScriptDelay>0</ScriptDelay> ) >> connection strings.xml
FOR/F%%i in(connection strings.txt)echo(
%%我
%%我
%%我
0
22
0
-加载%%i”%%i“-P 22
0)>>连接字符串.xml

理想情况下,如果批处理可以为每个用户生成单独的XML文件(如果可能的话),那就太好了。

这可以通过正确应用For循环和转义重定向字符来实现


@ECHO OFF
Call :find "connection strings.txt"
ECHO completed
pause
exit

:find

For /F "USEBACKQ delims=" %%a in ("%~1") DO (
    For %%i in (%%~a) DO (
    CALL :create "%%~i"
    )
) 2>nul
GOTO :EOF


:create
(
ECHO ^<Node Type="1"^>
ECHO ^<SavedSession^>%~1^</SavedSession^>
ECHO ^<DisplayName^>%~1^</DisplayName^>
ECHO ^<ServerName^>%~1^</ServerName^>
ECHO ^<PuttyConType^>0^</PuttyConType^>
ECHO ^<Port^>22^</Port^>
ECHO ^<UserName^>^</UserName^>
ECHO ^<Password^>^</Password^>
ECHO ^<PasswordDelay^>0^</PasswordDelay^>
ECHO ^<CLParams^>-load %~1 "%~1" -P 22^</CLParams^>
ECHO ^<ScriptDelay^>0^</ScriptDelay^>
)>>%~1.xml

GOTO :EOF


@回音
调用:查找“connection strings.txt”
回音完成
暂停
出口
:找到
对于/F“USEBACKQ delims=“%%a in(“%1”)DO(
对于%%i in(%%~a)DO(
调用:创建“%%~i”
)
)2>nul
后藤:EOF
:创建
(
回音^
回声^%~1^
回声^%~1^
回声^%~1^
回音^0^
回声^22^
回音^^
回音^^
回音^0^
回声^-荷载%%1“%~1”-P 22^
回音^0^
)>>%~1.xml
后藤:EOF

由于XML的语法规则,您不应考虑此任务的批处理文件,除非它们依次利用另一种理解语法并使用适当编码的语言或实用工具。我强烈建议您将注意力集中在PowerShell上,使用它搜索和编写代码。此网站可帮助您使用提供的代码修复特定问题。您的代码无效,存在多个问题,需要有效重写,因此当前脱离主题。通过将每行的回音括在括号内,可以一次性编写整个xml块。您缺少For命令的DO元素,也缺少嵌套的For循环来处理由空格删除的每个字符串。重定向字符的转义是您丢失的最后一部分。非常感谢您的帮助和描述!愚蠢的错误,但我甚至并没有考虑过逃避重定向chars.NP,希望您已经了解了更多关于批处理的帮助。