从Windowsbatch file中replace文本文件中的字符

我正在尝试编写一个batch file,它将查看小文本文件中的每个字符(实际上是CUE工作表),并执行三件事 – 删除所有问号,用连字符replace任何斜线标记,并用两个冒号replace冒号连字符 – 按照以下示例中的第二行。

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

我知道如何使用findstr将包含这些字符的行复制到一个新的文本文件(但只有这些行),而不是如何执行search和replace。 而且还有去除领先空间的不利后果,我希望保留这些空间。 不知道什么是正确的方法在这里。 (我应该补充说,由于各种原因,我不喜欢使用第三方实用程序。)

 @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的文件, q42482508.txt包含您的数据用于测试。

生成定义为%outfile%的文件

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

将文件的每一行读到%%a line , 替换每个? 什么也没有 ,只有一个-和两个一起,并echo结果。

为括号括起来允许重定向到指定的文件。

模式设置为“var1 =!var2: stringtoreplace = replacementstring !” 如记录, ! 代替%使用delayedexpansion。

请注意,您的文本指定了as的replacemnt字符串,而您的示例显示它被替换为“ Space – ”

你可以使用Powershell来解决这个问题。

打开PowerShell并键入

 (Get-Content C:\Users\Admin\StackOverflow\some.txt).Replace(":"," - -") | Set-Content C:\Users\Admin\StackOverflow\SomeModified.txt 

基本上,

Get-Content将打开文件。

替换文字(旧文字,新文字)

| Set-Content <path>在不同的文件上输出。

截图 源文件 Powershell命令 目标文件发布更改