使用 .bat 文件查找并替换目录中包含的多个文件中的字符串
Find and replace a string within multiple files contained within a directory using a .bat file
我的目标是搜索一个目录中多个 .config 文件中包含的字符串。
文件夹结构是这样的:C:\Parent_Folder\child_folder\
子文件夹包含许多不同的文件夹,每个文件夹中包含一个 .config 文件。
我正在尝试创建一个 .bat 文件,它允许我搜索所有这些文件夹,然后用新字符串替换特定字符串。
我找到了一种方法来搜索所有文件并将其打印到文档中,显示需要更改的地方:
findstr /i /s "DATABASE1" *.config > c:\temp\Changes.txt
但是,在创建批处理文件以搜索目录并用新字符串替换所有这些文件时,我发现文件路径不存在。
我看过以下类似问题:
Find and replace string in multiple files within a folder using windows Batch script
我目前使用的代码是:
@echo off
setlocal enableextensions disabledelayedexpansion
set "dir1=C:\Parent_Folder\child_folder\"
set "search=database1"
set "replace=db2"
for /f "delims=" %%i in ("%dir1%\*.config") do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:%search%=%replace%!"
>>"%configFile%" echo(!line!
endlocal
)
@pause
我一直遇到的错误是找不到指定的路径,我想可能是环境变量的问题,所以我把路径加进去,然后在.bat文件中显示了echo %PATH%
并且该路径确实存在,但是我一直收到错误说明它不存在。
所以我不确定是否真的是其他原因导致了这个问题。
任何建议都很好。
你可能想要 [SS64]: FOR /R.
小例子:
script00.bat:
@echo off
setlocal enableextensions disabledelayedexpansion
set _ROOT_DIR=".\dir0"
for /R %_ROOT_DIR% %%f in (*.config) do (
echo file: %%f
rem Do the rest
)
输出:
[cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q068684288]> tree /f /a
Folder PATH listing for volume SSD0-WORK
Volume serial number is AE9E-72AC
E:.
| script00.bat
|
\---dir0
+---dir0
| file.config
|
+---dir1
| file.config
|
\---dir2
file.config
[cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q068684288]> script00.bat
file: e:\Work\Dev\Whosebug\q068684288\dir0\dir0\file.config
file: e:\Work\Dev\Whosebug\q068684288\dir0\dir1\file.config
file: e:\Work\Dev\Whosebug\q068684288\dir0\dir2\file.config
我的目标是搜索一个目录中多个 .config 文件中包含的字符串。
文件夹结构是这样的:C:\Parent_Folder\child_folder\
子文件夹包含许多不同的文件夹,每个文件夹中包含一个 .config 文件。
我正在尝试创建一个 .bat 文件,它允许我搜索所有这些文件夹,然后用新字符串替换特定字符串。
我找到了一种方法来搜索所有文件并将其打印到文档中,显示需要更改的地方:
findstr /i /s "DATABASE1" *.config > c:\temp\Changes.txt
但是,在创建批处理文件以搜索目录并用新字符串替换所有这些文件时,我发现文件路径不存在。
我看过以下类似问题:
Find and replace string in multiple files within a folder using windows Batch script
我目前使用的代码是:
@echo off
setlocal enableextensions disabledelayedexpansion
set "dir1=C:\Parent_Folder\child_folder\"
set "search=database1"
set "replace=db2"
for /f "delims=" %%i in ("%dir1%\*.config") do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:%search%=%replace%!"
>>"%configFile%" echo(!line!
endlocal
)
@pause
我一直遇到的错误是找不到指定的路径,我想可能是环境变量的问题,所以我把路径加进去,然后在.bat文件中显示了echo %PATH%
并且该路径确实存在,但是我一直收到错误说明它不存在。
所以我不确定是否真的是其他原因导致了这个问题。
任何建议都很好。
你可能想要 [SS64]: FOR /R.
小例子:
script00.bat:
@echo off
setlocal enableextensions disabledelayedexpansion
set _ROOT_DIR=".\dir0"
for /R %_ROOT_DIR% %%f in (*.config) do (
echo file: %%f
rem Do the rest
)
输出:
[cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q068684288]> tree /f /a Folder PATH listing for volume SSD0-WORK Volume serial number is AE9E-72AC E:. | script00.bat | \---dir0 +---dir0 | file.config | +---dir1 | file.config | \---dir2 file.config [cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q068684288]> script00.bat file: e:\Work\Dev\Whosebug\q068684288\dir0\dir0\file.config file: e:\Work\Dev\Whosebug\q068684288\dir0\dir1\file.config file: e:\Work\Dev\Whosebug\q068684288\dir0\dir2\file.config