如何使用 Windows CMD 在多个文本文件(目录内)中搜索和替换字符串?

如何使用 Windows CMD 在多个文本文件(目录内)中搜索和替换字符串?

我在一个目录中有多个文本文件,我想替换每个出现的字符串1 设置线宽10 设置线宽。如何通过 Windows cmd 执行此操作?请帮忙。

答案1

如果你可以安装第三方实用程序,Gnused是为此类操作量身定制的。链接指向 Sourceforge 上托管的 Windows 版本,您可以下载并安装。这将是提示符下的语法:

for %i in (*.txt) do sed -i "s/1 setlinewidth/10 setlinewidth/g" %i

笔记:使用该-i选项,sed 将覆盖相关文件,因此请确保您有可用的备份,以防出现问题。

如果您无法安装 sed 实用程序,那么仅使用内置批处理语言将会变得更加困难。

编辑:我整理了一个小批处理文件,无需任何外部工具即可执行替换。将其另存为foo.cmd或任何您喜欢的名称,然后从命令行调用它:foo.cmd

警告:这是根据您问题中的示例非常具体地编写的。如果在 之前/之后的行首或行末有其他文本或甚至额外的空格1 setlinewidth,则此批处理文件将不起作用。这还将保存原始文本文件的副本,扩展名为 .bak(例如 textfile.txt.bak)。

@echo off
setlocal ENABLEEXTENSIONS
setlocal ENABLEDELAYEDEXPANSION

for %%a in (*.txt) do (
    echo Processing %%a...
    for /f "delims=^ tokens=1" %%i in (%%a) do (
        if /i "%%i"=="1 setlinewidth" (
            echo 10 setlinewidth>>%%a.new
        ) else (
            echo %%i>>%%a.new
        )
    )
    move /y %%a %%a.bak > nul
    ren %%a.new %%a
)

答案2

Powershell 有一些实用程序可以解决此问题,而无需下载任何外部软件或实用程序。查看本文Scripting Guy 写的,非常好。另外,我想说的是设置内容文档。

例子:

(Get-Content C:\Scripts\Test.txt) | Foreach-Object {$_ -replace "oldString", "newString"} | Set-Content C:\Scripts\Test.txt

相关内容