我需要递归地在Windows路径中找到一个特定的字符串,并用另一个字符串替换该字符串:
任务1
我(用帮助)确定了如何使用下面的脚本识别可用字符串的路径。
findstr /s /i /m /c:"topaz3258" H:\MKS\build\host\dev\*.* > H:\topaz3258\result.txt
任务2
现在,我需要您的帮助,以便在上面为字符串标识的所有路径中使用"topaz3258“更新"topaz103258”。文件类型为".ini“和".cmd”文件。
注意: Powershell在组织中受到限制,所以我必须使用批处理脚本。
发布于 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/迭代文件
编辑,我只是写这个徒手,但它可能看起来像
$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
我很快就把其他答案(也是编辑的)写在一起了。它将不再生成一个新文件,它直接写入原始文件。这很危险,你不能回去。没有撤销,所以以某种方式做一个临时备份。脚本将保留空行。它将不尊重单词的边界,例如
红蓝红(红->绿)绿蓝绿
@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
)
)
https://stackoverflow.com/questions/71654164
复制相似问题