Car*_* H. 7 windows text-editing command-line find-and-replace
我在一个目录中有多个文本文件,我想将每个出现的字符串1 setlinewidth 替换为10 setlinewidth。如何通过 Windows cmd 执行此操作?请帮忙。
小智 8
Powershell 具有无需下载任何外部软件或实用程序即可解决此问题的实用程序。看看脚本专家的这篇文章,非常不错。另外我想说看看Set-Content文档。
例子:
(Get-Content C:\Scripts\Test.txt) |
Foreach-Object {$_ -replace "oldString", "newString"} |
Set-Content C:\Scripts\Test.txt
如果您可以安装第三方实用程序,则 Gnu sed是为此类操作量身定制的。该链接指向托管在 Sourceforge 上的 Windows 版本,您可以下载和安装。这将是提示符处的语法:
for %i in (*.txt) do sed -i "s/1 setlinewidth/10 setlinewidth/g" %i
Run Code Online (Sandbox Code Playgroud)
注意:使用该-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
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47518 次 |
| 最近记录: |