见到大家,我有一个奇怪的问题。
我有这个.tmp文件。
M l FNT;yriad_b
M l FNT;arial_bo
mm
zO
J
O R,P
H50,5,T
D -3.0,2.2
F98;arial_bo
F99;yriad_b
Sl1;0.0,0.0,100,100,100
P -1.8
T:Line01;6.5,6.5,0,98,pt23;XXX
G 0,8.5,0;L:70.5,0.7
T:Line04;5.5,14.2,0,99,pt18,q100;XXXX
T:Line05;5.5,18.2,0,99,pt9,q100;XXXX
T:Line88;5.5,26.0,0,99,pt21,q100;XXXX
T:Line08;5.5,68.0,0,99,pt21,q100;XXXX
B 5.5,70,9,code128, 7,.4;XXXX
T:Line99;5.5,61.8,0,99,pt11,q100;XXXX
B 5.5,85,5,code128, 7,.25;XXXX
T:Line09;5.5,82.8,0,99,pt17,q100;XXXX
T:Line10;5.5,33.3,0,99,pt17,q100;XXXX
B 5.5,35,2,code128, 7,.3;XXXX
T:Line11;5.5,48.1,0,99,pt18,q100;XX
T:Line19;16.0,48.1,0,99,pt18,q100;XX
B 5.5,50.0,0,code128, 7.0,.3;8
A 1
;ABC123
我需要获得最后一行,完全 ABC123 ,不带; 字符。 我目前正在使用下面的批处理脚本,如果我在ABC123之前没有; 字符,则可以使用。我不知道为什么批处理脚本会用; 字符跳过行星。
批处理脚本。
for /f "delims=" %%x in (c:\print\pack2.tmp) do set Build=%%x
有人可以帮助我吗?
由于
答案 0 :(得分:3)
它会跳过以;
开头的行,因为这是默认的EOL字符,另请参阅FOR /?
。
为避免这种情况,您可以将EOL更改为其他字符,例如
for /f "EOL=Y delims=" %%x in (c:\print\pack2.tmp) do set Build=%%x
如果您知道某个特定角色无法在此位置,那么您可以选择它。
或者您使用findtr封装文件,以便每行以行号开头(然后FOR/F
也可以抓住空行)。
setlocal EnableDelayedExpansion
for /f "delims=" %%L in ('findstr /n "^" c:\print\pack2.tmp') do (
set "line=%%L"
set "Build=!line:*:=!"
)
答案 1 :(得分:1)
由于for /F
循环的eol
选项默认为;
字符,因此会跳过该行。
与delims
选项不同,您不能通过声明选项字符串eol
来简单地禁用"eol="
选项,因为这会将其设置为"
字符。类似"eol= delims="
的字符串也不起作用,因为这会将 SPACE 作为eol
字符。
要禁用eol
选项,有几种可能性:
将其隐藏在delims
选项后面:
for /F "usebackq eol=, delims=," %%L in ("file.txt") do set "Build=%%L"
为其中一个eol
字符指定delims
个字符会将eol
设为delims
,因为for /F
似乎优先于eol
。 delims
和for /F usebackq^ delims^=^ eol^= %%L in ("file.txt") do set "Build=%%L"
的顺序无关紧要。
使用奇怪的不带引号的语法:
,
每个令牌分隔符( SPACE , TAB ,;
,=
,0xFF
以及非中断空格{ {1}})必须通过前面的^
进行转义。此处,必须将eol
指定为最后一个选项。未转义的 SPACE 不会被视为eol
字符,因为解析器会将其用于将选项字符串与for
变量引用%%L
分开。 / p>
使用奇数换行符语法:
for /F usebackq^ eol^=^
delims^= %%L in ("file.txt") do set "Build=%%L"
此处必须填写空行。 ^
部分之后的eol^=
构成行继续,因此忽略第一个换行符(CR + LF,回车换行序列)。下一个字符,LF(解析器在读取代码行时已经跳过CR),字面上被视为eol
字符。由于在标记行尾的文本行中不会出现这种情况,因此最终会禁用eol
选项。
答案 2 :(得分:0)
REM
@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
您需要更改sourcedir
的设置以适合您的具体情况。
我使用了一个名为q40888302.txt
的文件,其中包含我的测试数据。