批处理文件 - 查找包含回车符和文本的字符串,并替换为其他内容。

时间:2015-05-16 19:34:03

标签: batch-file replace

我正在努力处理批处理文件,我希望删除换行符。具体来说,我只想在某些情况下删除换行符。 我有一个文本文件,格式如下:

TOTAL, blah1, blah2, blah3
PART, blah1, blah2, blah3
PART, blah1, blah2, blah3
TOTAL, blah1, blah2, blah3
PART, blah1, blah2, blah3
TOTAL, blah1, blah2, blah3
PART, blah1, blah2, blah3
PART, blah1, blah2, blah3

我想要的输出是:

TOTAL, blah1, blah2, blah3 PART, blah1, blah2, blah3 PART, blah1, blah2, blah3
TOTAL, blah1, blah2, blah3 PART, blah1, blah2, blah3
TOTAL, blah1, blah2, blah3 PART, blah1, blah2, blah3 PART, blah1, blah2, blah3

总之,我希望所有“PART”记录与它们上面的TOTAL记录显示在同一行。 我可以在带有find / replace的文本编辑器中实现这一点,通过查找换行符后跟字符串“PART”并将其替换为空格字符。 我需要使用批处理文件自动执行此过程,因为我将在应该运行的文件夹中包含大约80个* .txt文件。 理想情况下,批处理文件应创建原始文件的重命名副本,而原始文件保留未编辑。

到目前为止我设法找到的是如何删除所有换行符。

提前致谢。

1 个答案:

答案 0 :(得分:0)

@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=c:\106x"
SET "destdir=U:\destdir"
FOR %%a IN (%sourcedir%\*.txt) DO (
(
 SET "line="
  FOR /f "tokens=1*" %%p IN (%%a) DO (
   IF "%%p"=="TOTAL," (
    IF DEFINED line ECHO !line:~1!  
    SET "line="
   )
   SET "line=!line! %%p %%q"
  )
  IF DEFINED line ECHO !line:~1!
 )
)>"%destdir%\%%~na.new" 
)

GOTO :EOF

您需要更改sourcedirdestdir的设置以适应您的具体情况,并更改文件掩码*.txt以适应。

对于匹配*.txt的源目录中的每个文件,请阅读每一行。如果该行开始“TOTAL”,则输出line中的所有累计行并清除line,然后将文本累积到line

目标文件名位于目标目录中,与原始文件名(%~na)和扩展名.new

相同