Batch file 批处理文件以从.tmp读取最后一行,即使它以开头;性格
见鬼,各位,我有个奇怪的问题要问你们 我有这个.tmp文件 我需要得到最后一行,确切地说是ABC123,没有字符。 我目前正在使用下面的批处理脚本,如果我没有,它就可以工作ABC123之前的字符。我不知道为什么批处理脚本跳过了带有的行字符 批处理脚本 有人能帮我吗?Batch file 批处理文件以从.tmp读取最后一行,即使它以开头;性格,batch-file,Batch File,见鬼,各位,我有个奇怪的问题要问你们 我有这个.tmp文件 我需要得到最后一行,确切地说是ABC123,没有字符。 我目前正在使用下面的批处理脚本,如果我没有,它就可以工作ABC123之前的字符。我不知道为什么批处理脚本跳过了带有的行字符 批处理脚本 有人能帮我吗? 谢谢它跳过以开头的行由于这是默认的下线字符,请参见以获取/? 为了避免这种情况,您可以将EOL更改为另一个角色,如 for /f "EOL=Y delims=" %%x in (c:\print\pack2.tmp) do set
谢谢它跳过以
开头的行代码>由于这是默认的下线字符,请参见以获取/?
为了避免这种情况,您可以将EOL更改为另一个角色,如
for /f "EOL=Y delims=" %%x in (c:\print\pack2.tmp) do set Build=%%x
如果你知道一个特定的角色不能在这个位置,那么你可以选择它
或者使用findstr将文件括起来,这样每一行都以行号开头(那么/F
的也可以抓取空行)
雷姆
您需要更改sourcedir
的设置以适应您的环境
我使用了一个名为Q4088302.txt
的文件,其中包含测试数据。由于循环的eol
选项默认为,因此跳过该行代码>字符
与delims
选项不同,您不能简单地通过声明选项字符串“eol=“
”来禁用eol
选项,因为这样会将其设置为”
字符。类似“eol=delims=“
这样的字符串也不起作用,因为这样会占用空间作为eol
字符
要禁用下线
选项,有几种可能性:
将其隐藏在delims
选项后面:
for /F "usebackq eol=, delims=," %%L in ("file.txt") do set "Build=%%L"
将eol
字符指定给一个给定的delims
字符将禁用eol
,因为delims
对于/F
,似乎具有比更高的优先级。eol
和delims
的顺序并不重要
使用奇数无引号语法:
for /F usebackq^ delims^=^ eol^= %%L in ("file.txt") do set "Build=%%L"
每个令牌分隔符(空格、制表符、、、;
、=
以及非中断空格0xFF
)必须通过前面的^
进行转义。在此,必须将eol
指定为最后一个选项。未转义的空格不作为eol
字符,因为解析器使用它来将变量引用%%L
的选项字符串与分开
使用奇数换行语法:
for /F usebackq^ eol^=^
delims^= %%L in ("file.txt") do set "Build=%%L"
此处必须使用空行。在eol^=
部分之后的^
构成行继续,因此忽略第一个换行符(CR+LF,回车换行序列)。下一个字符是LF(解析器在读取代码行时已跳过CR),按字面意思理解为eol
字符。由于这些字符不能出现在文本行中,因为它们标记行的结尾,因此eol
选项最终被禁用
谢谢,是的,我的问题解决了。我不知道EOL选项。
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q40888302.txt"
FOR /f "usebackqtokens=1*eol=;delims=; " %%a IN ("%filename1%") DO (
SET var=%%~a
)
ECHO "%var%"
GOTO :EOF
for /F "usebackq eol=, delims=," %%L in ("file.txt") do set "Build=%%L"
for /F usebackq^ delims^=^ eol^= %%L in ("file.txt") do set "Build=%%L"
for /F usebackq^ eol^=^
delims^= %%L in ("file.txt") do set "Build=%%L"