@ECHO Off
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q35828741.txt"
SET "outfile=%destdir%\outfile.txt"
FOR /L %%f IN (1,1,3) DO SET "field%%f="
(
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
FOR %%b IN (%%a) DO CALL :process %%b
)
)>"%outfile%"
GOTO :EOF
:process
IF NOT DEFINED field1 SET "field1=%~1"&GOTO :EOF
IF NOT DEFINED field2 SET "field2=%~1"&GOTO :EOF
SET "field3=%~1"
:repcwp
FOR /f "tokens=1*delims=:" %%f IN ("%field3%") DO (
SET "field3=%%g"
IF DEFINED field3 (SET "field3=%%f''%%g"&GOTO repcwp) ELSE (SET "field3=%%~f")
)
set "field1=%field1:;=|%"
set "field1=%field1:"='%"
set "field2=%field2:;=|%"
set "field2=%field2:"='%"
set "field3=%field3:;=|%"
set "field3=%field3:"='%"
ECHO "%field1:''=:%";"%field2:''=:%";"%field3:''=:%"
FOR /L %%f IN (1,1,3) DO SET "field%%f="
GOTO :eof
您需要更改sourcedir
和destdir
的设置以适合您的情况。
我使用了一个名为q35828741.txt
的文件,其中包含我的测试数据。
可生产定义为%OUTFILE%
进程中的文件的每一行的文件,假定它是良好的构造。
使用简单的for
循环将三个字段传递给过程:过程。线各自的形式是“DATA1” 隔板“DATA2” 隔板“DATA3”
在:process
,数据累积到field1..3
由于共同子串替换机制使用:
以分离“to”和“from”字符串,用不同的字符串''
替换每个:
。这只适用于field3
,因为它从样本数据中可以看出它是唯一可能包含冒号的字段。如果冒号可能出现在其他领域,这只是跟随弹跳球的问题。
更换所有冒号后,根据需要替换分号和兔耳,然后在输出数据到目标文件的echo
中,用冒号替换''
。
这产生了一些假设,包括数据不包含%
或其他尴尬的字符,并且数据中没有::
的实例。
这不是一个问题,而是一个任务请求;请分享您迄今为止所尝试的内容;请记住,SO不是免费的写作服务...... – aschipfl