我正在尝试编写一个批处理文件,该文件将查看一个小文本文件(实际上是CUE表)中的每个字符,并执行三件事-删除所有问号,将所有斜杠替换为连字符并将冒号替换为两个连字符-按照下面示例中的第二行。

  TRACK 01 AUDIO
    TITLE "Colon:  Slash / Question Mark?"
(would be changed to)
    TITLE "Colon -- Slash - Question Mark"

我知道如何使用findstr将包含那些字符的行复制到新的文本文件(但仅限那些行)中,而不是如何进行搜索和替换。 findstr还具有删除前导空格的不良后果,我希望保留该空格。不知道这里正确的方法是什么。 (我应该补充一点,由于种种原因,我宁愿不使用第三方实用程序。)

最佳答案

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q42482508.txt"
SET "outfile=%destdir%\outfile.txt"
(
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
 SET "line=%%a"
 SET "line=!line:?=!"
 SET "line=!line:/=-!"
 SET "line=!line::=--!"
 ECHO !line!
)
)>"%outfile%"

GOTO :EOF

您需要根据自己的情况更改sourcedirdestdir的设置。

我使用了一个名为q42482508.txt的文件来包含您的数据进行测试。

产生定义为%outfile%的文件

调用延迟扩展以允许在代码块中操纵字符串。

从文件的每一行读取%%a,然后line;将每个?替换为空,将/替换为一个-,将:替换为两个,然后将echo替换为结果。

for后面加上括号可以重定向到指定的文件。

模式设置为“var1 =!var2:stringtoreplace =替换字符串!”如记录所示,使用!代替%可以使用延迟扩展。

请注意,您的文本将:的替换字符串指定为--,而您的示例显示该字符串被“Space--”替换

07-26 09:37
查看更多