用for循环分隔名字和姓氏

时间:2019-06-04 11:35:08

标签: batch-file for-loop


我正在处理从记录创建.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

2 个答案:

答案 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