首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >递归搜索字符串并替换字符串

递归搜索字符串并替换字符串
EN

Stack Overflow用户
提问于 2022-03-28 21:56:33
回答 1查看 205关注 0票数 1

我需要递归地在Windows路径中找到一个特定的字符串,并用另一个字符串替换该字符串:

任务1

我(用帮助)确定了如何使用下面的脚本识别可用字符串的路径。

代码语言:javascript
运行
复制
findstr /s /i /m /c:"topaz3258" H:\MKS\build\host\dev\*.* > H:\topaz3258\result.txt

任务2

现在,我需要您的帮助,以便在上面为字符串标识的所有路径中使用"topaz3258“更新"topaz103258”。文件类型为".ini“和".cmd”文件。

注意: Powershell在组织中受到限制,所以我必须使用批处理脚本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-28 22:04:56

使用powershell脚本,您可以很容易地在文件中执行regex替换。我刚刚从我已经有过的东西中拿出了一个例子,这大概在一般情况下是可行的。但这只是做一个文件

(gc "input“-raw) -replace 'topaz3258','topaz103258‘而外-文件-encoding ASCII”输出文件名“

您可以很容易地通过https://theitbros.com/powershell-script-for-loop-through-files-and-folders/迭代文件

编辑,我只是写这个徒手,但它可能看起来像

代码语言:javascript
运行
复制
$files = Get-ChildItem H:\MKS\build\host\dev\ -Recurse *.*

foreach ($f in $files){

(gc $f.FullName -raw) -replace 'topaz3258', 'topaz103258' | Out-File -encoding ASCII $f.FullName

}

如果您不想就地执行,您可以指定一个不同的输出路径,或者在对其进行操作之前复制文件夹树。取决于你到底需要什么。星点星是一个非常宽的网投,你可能想要只过滤文本文件或其他什么。

如果您没有powershell

我很快就把其他答案(也是编辑的)写在一起了。它将不再生成一个新文件,它直接写入原始文件。这很危险,你不能回去。没有撤销,所以以某种方式做一个临时备份。脚本将保留空行。它将不尊重单词的边界,例如

红蓝红(红->绿)绿蓝绿

代码语言:javascript
运行
复制
@echo off
SET FIND_STR=topaz3258
SET REPL_STR=topaz103258
SET ROOT_DIR=H:\MKS\build\host\dev\


for /R "%ROOT_DIR%" %%a in (*.txt) do (
    :: say the filename
    echo %%a

    for /f "delims=" %%i in ('type "%%a" ^| find /v /n "" ^& break ^> "%%a"') do (
        set "line=%%i"
        setlocal enabledelayedexpansion
        set "line=!line:*]=!"
        if defined line set "line=!line:%FIND_STR%=%REPL_STR%!"
        >>"%%a" echo(!line!
        endlocal
    )
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71654164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档