从Windows批处理文件替换文本文件中的字符

时间:2017-02-27 09:51:17

标签: windows batch-file text

我试图编写一个批处理文件来查看小文本文件中的每个字符(实际上是CUE表)并做三件事 - 删除所有问号,用连字符替换任何斜杠标记并用两个连字符替换冒号 - 如下例中的第二行所示。

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

我知道如何使用findstr将包含这些字符的行复制到新的文本文件(但只包括那些行),而不是如何进行搜索和替换。而且,findstr也有删除前导空格的不必要后果,我希望保留这些空间。不确定这里的方法是什么。 (我应该补充说,出于各种原因,我不想使用第三方实用程序。)

2 个答案:

答案 0 :(得分:4)

您可以使用Powershell轻松解决此问题。

打开PowerShell并输入此

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

基本上,

Get-Content 会打开该文件。

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

<强> | Set-Content &lt;路径&gt;在不同的文件上输出。

<强>截图 Source File Powershell Command Destination File Post Change

答案 1 :(得分:3)

@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;将每个?替换为 no ,将/替换为-,将:替换为两个,并echo结果。

括号for允许重定向到指定文件。

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

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