繁体   English   中英

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

[英]Replacing characters in a text file from Windows batch file

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

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

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

您可以使用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命令 目标文件发布更改

@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显结果。

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

模式设置为“ var1 =!var2: stringtoreplace = replacementstring !” 根据记录, ! 代替%以使用延迟扩展。

请注意,您的文本指定replacemnt字符串:作为--而你的例子说明它被替代“ 空间 - ”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM