Batch file 如何从两个for循环获得输出?

Batch file 如何从两个for循环获得输出?,batch-file,for-loop,scripting,text-files,Batch File,For Loop,Scripting,Text Files,我有以下input.txt文件: tr=min;JohnLoeffler te=min;TimWalter 我想要的批处理文件的目的是为我提供: tr min;JohnLoeffler te min;TimWalter 我的批处理文件是: setlocal EnableDelayedExpansion for /f "tokens=1,2,3* delims=;" %%a in (E:\input.txt) do ( echo.%%a>current.tok E:\ProtocoI\

我有以下input.txt文件:

tr=min;JohnLoeffler
te=min;TimWalter 
我想要的批处理文件的目的是为我提供:

tr min;JohnLoeffler
te min;TimWalter
我的批处理文件是:

setlocal EnableDelayedExpansion
for /f "tokens=1,2,3* delims=;" %%a in (E:\input.txt) do (
echo.%%a>current.tok
E:\ProtocoI\%%b
for /f " tokens=* delims= " %%a in (E:\input.txt) do (
call :sub1 %%a
)
GOTO :EOF
:sub1
echo %1 %2
echo.%1 %2; %%b;!RESULT!>>output.txt
)
GOTO :EOF
然而,我得到的结果是:

tr min; %b;
te min; %b;
请注意,我需要current.tok用于另一个函数,第二个for循环用于删除te=min和tr=min中的等号。现在我不知道如何使用这两个for循环来获得正确的输出。 有人能帮我吗? 谢谢你, HOda

试试这个,我不得不猜测一下你想要实现什么

@Echo关闭
SetLocal EnableDelayedExpansion
(设置SrcFile=E:\input.txt)
对于/F“UseBackQ EOL==Tokens=1-2*Delims==;”(“%SrcFile%”)中的%%A,请执行以下操作(
>current.tok Echo=%%A=%%B
>>E:\ProtocoI\%%C\output.txt Echo=%%A%%B;%%C;!RESULT!)
后藤:EOF
试试这个,我不得不猜测一下你想要实现什么

@Echo关闭
SetLocal EnableDelayedExpansion
(设置SrcFile=E:\input.txt)
对于/F“UseBackQ EOL==Tokens=1-2*Delims==;”(“%SrcFile%”)中的%%A,请执行以下操作(
>current.tok Echo=%%A=%%B
>>E:\ProtocoI\%%C\output.txt Echo=%%A%%B;%%C;!RESULT!)
后藤:EOF


:sub1
在代码块内部,您必须将其移到括号外。@您的意思是第二个for循环的括号外吗?是的,标签不能在循环内,或括号之间的任何其他内容。它必须放在外面。它可能会遇到语法错误或行为不稳定。@areset但它已经超出了循环秒的括号。您可以使用以下命令:
for/F“tokens=1*delims==”%%a in(E:\input.txt)do echo%%a%%b%%code>
:sub1
在代码块中,您必须将其移到括号外。@Arescet您是说第二个for循环的括号外吗?是的,标签不能在循环内,或括号之间的任何其他内容。它必须放在外面。它可能会遇到语法错误或行为异常。@areset但它已经超出了循环秒的括号。您可以使用以下命令:
for/F“tokens=1*delims==”%a in(E:\input.txt)do echo%%a%%b
感谢您的编辑,你不会相信在android手机上输入预测文本到论坛有多困难!我认为
EOL==
会适得其反,最好省略它。现在还不清楚结果是从哪里来的。在OP的原始版本中,
%%a
被非法重复使用,
%%b
超出了子例程的范围。关键是使用分隔符正确地标记和重构
current.tok
中的数据,因为缺少进一步的信息,我们不得不假设
str1=str2
。至于
output.txt
文件中的数据-很好-很好的猜测,但是水晶球有点过载…我的理解是,将EOL设置为与DELIMS相同,可以有效地绕过分号的疯狂默认EOL,并确保读取所有行。(我认为这是必要的,因为OP正在阅读一份布满分号的文件)。OP声明这是脚本的一部分,因为我不知道在哪里!结果!我无法将其更正为更可能的%RESULT%或验证其使用。我没有听说过EOL=DELIMS,但我做了一些宝贵的EOL试验。现在是凌晨2点25分,如果我还记得的话,我明天会做一些实验……谢谢你的编辑,你不会相信在android手机上用预测文本在论坛上打字有多困难!我认为
EOL==
会适得其反,最好省略它。现在还不清楚结果是从哪里来的。在OP的原始版本中,
%%a
被非法重复使用,
%%b
超出了子例程的范围。关键是使用分隔符正确地标记和重构
current.tok
中的数据,因为缺少进一步的信息,我们不得不假设
str1=str2
。至于
output.txt
文件中的数据-很好-很好的猜测,但是水晶球有点过载…我的理解是,将EOL设置为与DELIMS相同,可以有效地绕过分号的疯狂默认EOL,并确保读取所有行。(我认为这是必要的,因为OP正在阅读一份布满分号的文件)。OP声明这是脚本的一部分,因为我不知道在哪里!结果!我无法将其更正为更可能的%RESULT%或验证其使用。我没有听说过EOL=DELIMS,但我做了一些宝贵的EOL试验。现在是凌晨2点25分,如果我记得的话,我明天会做一些实验。。。