我只是在学习批处理脚本的过程中尝试简单的循环。
for /f "tokens=* delims= " %%a in (abc.txt) do echo %%a
我的abc.txt conatins
word1 word2 word3
现在输出应该是这样的
word1
word2
word3
但我只是得到一行而不是三行。为什么?我在这里做错了什么?
答案 0 :(得分:3)
有很多方法可以实现这一目标:
@Echo off
Echo Variant 1
for /f "tokens=1-3" %%a in (abc.txt) do echo %%a & echo %%b & echo %%c
Echo Variant 2
For /f "tokens=*" %%a in (abc.txt) do for %%B in (%%a) Do Echo %%B
Echo Variant 3
For /f "tokens=*" %%a in ('type abc.txt') do for %%B in (%%a) Do Echo %%B
示例输出:
Variant 1
word1
word2
word3
Variant 2
word1
word2
word3
Variant 3
word1
word2
word3
答案 1 :(得分:2)
命令for /f
在每次迭代时逐行处理文本文件abc.txt
。跳过空行以及以分号开头的行,因为eol=;
是默认值。
根据tokens=
和delims=
, FOR 处理所有其他行。
如果abc.txt
只包含一行word1 word2 word3
,则命令 FOR 会将此行拆分为分配给循环变量的子串(标记)。分割将使用delims=
(只是空格字符)完成,如下所示:
word1
已分配给 FOR 命令行中指定的循环变量a
。word2
根据ASCII table分配给下一个循环变量b
,这就是为什么循环变量区分大小写与环境变量不区分大小写的原因。word3
被分配给下一个但只有一个循环变量c
。使用tokens=
可以将子字符串更改为循环变量赋值顺序。例如,tokens=2
第一个子字符串word1
被忽略,第二个word2
被分配给循环变量a
,第三个word3
被再次忽略。仅忽略1个空格分隔字符串的行也将被忽略,因为不能将至少1个子字符串分配给指定的(第一个)循环变量。该行必须至少有2个空格分隔的字符串tokens=2
,用于在循环体中运行命令。
tokens=1*
表示将word1
分配给a
以及第一个子字符串到下一个循环变量b
后的所有内容,而不进行进一步拆分,从而将word2 word3
分配给循环变量{ {1}}。
b
表示根本不拆分该行。所以tokens=*
没有效果。
delims=
在一行上有3个单词的任务需要两个循环,并且循环体中的命令应该在每行的每个单词上执行:
abc.txt
外部循环从文本文件@echo off
for /F "delims=" %%I in (abc.txt) do (
echo Line: %%I
for %%J in (%%I) do echo %%J
)
中读取不以分号开头的非空行,并将整行分配给循环变量abc.txt
。
没有选项I
的内部循环使用标准分隔符来处理此行,使用 FOR 而不使用/F
,其中包括空格,制表符,逗号和其他一些内容。< / p>
文件/F
中单行中word1 word2 word3
的此批处理文件的输出为:
abc.txt
顺便说一句:在命令提示符窗口Line: word1 word2 word3
word1
word2
word3
中运行在几个显示页面上输出该命令的帮助。由于存在大量变体,for /?
的行为确实是最难理解的。
答案 2 :(得分:-2)
尝试以下版本之一:
版本1(将该单词放入文件中,然后在屏幕上显示,以及回显的内容):
ssh yourhost "$cmd"
第2版:
@echo off
title text file reader/writer
echo This version inputs text that is predefined in the source code into a .txt file.
echo oh hey! I am text line 1>testwords.txt
echo oh hey! I am text line 2>>testwords.txt
echo oh hey! I am text line 3>>testwords.txt
echo oh hey! I am text line 4>>testwords.txt
echo Text entered! displaying below!
type testwords.txt
pause
del testwords.txt
exit
第3版:
@echo off
title text file reader/writer
echo This version displays predefined text in the source code as an "echo"
echo oh hey! I am text!
pause
exit
第4版:
@echo off
title text Displayer
echo This version displays User Entered text as an "echo" via the "set" command.
set /p text=Enter text here:
echo You have entered: %text%
pause
exit