首页 文章

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

提问于
浏览
0

我正在尝试编写一个批处理文件,它将查看小文本文件中的每个字符(实际上是CUE表)并执行三项操作 - 删除所有问号,用连字符替换任何斜杠标记并用两个替换冒号连字符 - 如下例中的第二行所示 .

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

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

2 回答

  • 2
    @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 ;将 ? 替换为空, / 替换为 - ,将 : 替换为2,结果为 echo .

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

    模式设置为“var1 =!var2:stringtoreplace = replacementstring!”据记载, ! 代替 % 使用delayedexpansion .

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

  • 3

    You can use Powershell to solve this very easily.

    打开PowerShell并输入

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

    基本上,

    Get-Content 将打开该文件 .

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

    | Set-Content <path>在diffrent文件上输出 .

    Screenshots
    Source File

    Powershell Command

    Destination File Post Change

相关问题