递归搜索字符串并替换字符串
search for string recursively and replace the string
我需要在 Windows PATH 中递归地找到一个特定的字符串,并将该字符串替换为另一个字符串:
任务#1
我确定(在帮助下)如何使用以下脚本识别可用字符串的路径。
findstr /s /i /m /c:"topaz3258" H:\MKS\build\host\dev\*.* > H:\topaz3258\result.txt
任务#2
现在我需要您的帮助,以在为字符串标识的所有上述路径中将“topaz3258”更新为“topaz103258”。文件类型为“.ini”和“.cmd”文件。
注意:Powershell在组织中受限,所以我不得不使用Batch script。
使用 powershell 脚本,您可以非常轻松地在文件中进行正则表达式替换。我只是从我已有的东西中举了一个例子,这应该可以正常工作。但这只是做一个文件
(gc "输入文件名" -raw) -replace 'topaz3258', 'topaz103258' | Out-File -编码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
}
如果您不想这样做 in-place 您可以指定不同的输出路径,或者在操作之前复制文件夹树。取决于你到底需要什么。 star dot star 是一个非常广泛的网络,顺便说一句,您可能只想按文本文件或其他内容进行过滤
如果你没有powershell
我从其他答案中快速将其组合在一起(也进行了编辑)。它不会再创建新文件,而是直接写入原始文件。这很危险,你不能回去。无法撤消,因此请以某种方式进行临时备份。该脚本将保留空行。它不会遵守单词边界,例如
红蓝reddit(红->绿)绿蓝greendit
@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
)
)
我需要在 Windows PATH 中递归地找到一个特定的字符串,并将该字符串替换为另一个字符串:
任务#1
我确定(在帮助下)如何使用以下脚本识别可用字符串的路径。
findstr /s /i /m /c:"topaz3258" H:\MKS\build\host\dev\*.* > H:\topaz3258\result.txt
任务#2
现在我需要您的帮助,以在为字符串标识的所有上述路径中将“topaz3258”更新为“topaz103258”。文件类型为“.ini”和“.cmd”文件。
注意:Powershell在组织中受限,所以我不得不使用Batch script。
使用 powershell 脚本,您可以非常轻松地在文件中进行正则表达式替换。我只是从我已有的东西中举了一个例子,这应该可以正常工作。但这只是做一个文件
(gc "输入文件名" -raw) -replace 'topaz3258', 'topaz103258' | Out-File -编码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
}
如果您不想这样做 in-place 您可以指定不同的输出路径,或者在操作之前复制文件夹树。取决于你到底需要什么。 star dot star 是一个非常广泛的网络,顺便说一句,您可能只想按文本文件或其他内容进行过滤
如果你没有powershell
我从其他答案中快速将其组合在一起(也进行了编辑)。它不会再创建新文件,而是直接写入原始文件。这很危险,你不能回去。无法撤消,因此请以某种方式进行临时备份。该脚本将保留空行。它不会遵守单词边界,例如
红蓝reddit(红->绿)绿蓝greendit
@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
)
)