我在一个目录中有多个文本文件,我想替换每个出现的字符串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
)