繁体   English   中英

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

[英]Batch File - find a string which includes a carriage return and text and replace with something else.

我正在处理一个批处理文件,因此我想删除一个换行符。 具体来说,我只想在某些情况下删除换行符。 我有一个以下格式的文本文件:

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”记录显示在同一行中。 我可以在文本编辑器中使用查找/替换来实现此目的,方法是找到一个换行符,后跟字符串“ PART”,然后将其替换为空格字符。 我需要使用批处理文件来自动执行此过程,因为我将在其中运行约80个* .txt文件。 理想情况下,批处理文件应创建原始文件的重命名副本,而保留原始文件不变。

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

提前致谢。

@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 ,然后将文本累加到line

目标文件名将在目标目录中,与原始名称( %~na .new )相同,扩展名为.new

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM