我正在尝试编写一个批处理文件,该文件将查看一个小文本文件(实际上是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
您需要根据自己的情况更改
sourcedir
和destdir
的设置。我使用了一个名为
q42482508.txt
的文件来包含您的数据进行测试。产生定义为%outfile%的文件
调用延迟扩展以允许在代码块中操纵字符串。
从文件的每一行读取
%%a
,然后line
;将每个?
替换为空,将/
替换为一个-
,将:
替换为两个,然后将echo
替换为结果。在
for
后面加上括号可以重定向到指定的文件。模式设置为“var1 =!var2:stringtoreplace =替换字符串!”如记录所示,使用
!
代替%
可以使用延迟扩展。请注意,您的文本将
:
的替换字符串指定为--
,而您的示例显示该字符串被“Space--”替换