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

Wal*_*ers 0 windows text batch-file

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

  TRACK 01 AUDIO
    TITLE "Colon:  Slash / Question Mark?"
(would be changed to)
    TITLE "Colon -- Slash - Question Mark"
Run Code Online (Sandbox Code Playgroud)

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

Mag*_*goo 7

@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
Run Code Online (Sandbox Code Playgroud)

您需要更改的设置sourcedir,并destdir以适合你的情况。

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

生成定义为 %outfile% 的文件

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

读取文件的每一行到%%a那里line;替换每个?没有/有一个-:两个,和echo结果。

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

模式设置为 "var1=!var2: stringtoreplace = replacementstring !" 如文档所述,!代替%使用延迟扩展。

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

  • 当然。将 `"%filename1%"` 替换为 `'findstr /v /L /i /b /c:"INDEX?" "%filename1%"'` 并删除 `usebackq`。`usebackq` 指示将双引号字符串解释为文件名,而不是字符串(如果文件名中有空格)。`findstr` 命令 ** 必须** 被单引号括起来,意味着 `/v` 行不匹配 `/L` 字面上的 `/i` 不区分大小写(如果需要)`/b` 开始 `/c: “字符串匹配”`。有关更多信息,请参阅提示中的 `findstr /?`。 (2认同)

Bal*_*ngh 5

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

打开PowerShell并输入

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

基本上,

Get-Content将打开文件。

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

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

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