我正在处理从记录创建.txt文件的批处理。该文件将在以后由另一个程序处理。
当前记录如下:
11111;Lastname Firstname SecondFirstname;1234567;SomeText
22222;Lastname Firstname;1254557;SomeText
33333;Lastname Firstname;1234567;SomeText
我想在姓和名之间使用分号。问题是带有两个名字的句子。名称之间不应使用分号。
最后它应该看起来像这样:
11111;Lastname;Firstname SecondFirstname;1234567;SomeText
22222;Lastname;Firstname;1254557;SomeText
33333;Lastname;Firstname;1234567;SomeText
有人在这里有个主意吗?
我已经尝试了以下方法,但是不能解决两个名字的问题:
type nul>tmp.txt
for /f "delims=: tokens=1*" %%i in ('findstr /n "^" "test_output.txt"') do set "Zeile=%%j" &call :sub
move /y "tmp.txt" "test_output.txt"
goto :eof
:sub
if not defined Zeile (
>>tmp.txt echo.
goto :eof
)
>>tmp.txt echo %Zeile: =;%
goto :eof
答案 0 :(得分:2)
第一次使用;
分隔符进行解析,第二次使用<SPACE>
分隔符(使用{{1}来解析第二个令牌(如果考虑行号,则是第三个令牌) })解决了您的问题:
tokens=1,*
(一次重定向整个输出比重定向单行要快得多-特别是对于大文件)
答案 1 :(得分:2)
您需要两个嵌套的for /F
,第一个嵌套在分号处,第二个嵌套在有限的2个分裂处。
在cmd行中为元变量使用大写%A
和小写%a
:
for /F "tokens=1-3* delims=;" %A in (test_output.txt) do @for /F "tokens=1*" %a in ("%B") do @Echo %A;%a;%b;%C;%D
在保存到new_output.txt的批处理文件中:
:: Q:\Test\2019\06\04\SO_56443069.cmd
@Echo off&SetLocal EnableDelayedExpansion
(for /F "tokens=1-3* delims=;" %%A in (test_output.txt
) do for /F "tokens=1*" %%a in ("%%B"
) do Echo %%A;%%a;%%b;%%C;%%D
) >new_output.txt
示例输出:
> type new_output.txt
11111;Lastname;Firstname SecondFirstname;1234567;SomeText
22222;Lastname;Firstname;1254557;SomeText
33333;Lastname;Firstname;1234567;SomeText