我们有多个批处理脚本(大约200个)正在从调度程序执行。我们希望用不同的命令替换所有批处理脚本中使用的命令。 Windows是否提供了批量编辑文件的命令或实用程序。 (类似于unix中Sed和AWK的东西)。
请帮助。 示例命令如下: 我们需要用每个脚本中的startscen_dev替换Command Startscen。
自:
startcen " PKG_TEST" " -1" " TEST" " -AGENT_URL = http://localhost:20910/oraclediagent"
要:
startscen_dev " PKG_TEST" " -1" " TEST" " -AGENT_URL = http://localhost:20910/oraclediagent"
答案 0 :(得分:0)
以下代码将startscen
替换为指定文件夹中所有startscen_dev
个文件中的.bat
。对于较大的文件,这可能需要一段时间。该脚本基于this post。另请注意,这不会替换整个字符串,而只会替换startscen
,因为我无法在引号内获取引号。
@echo off
REM The following variable is all you need to care about.
set targetFolder=folder\*.bat
for /r %%i in (%targetFolder%) do (
call :FindReplace "startscen " "startscen_dev " "%%i"
)
exit
:FindReplace <findstr> <replstr> <file>
set tmp="%temp%\tmp.txt"
If not exist %temp%\_.vbs call :MakeReplace
for /f "tokens=*" %%a in ('dir "%3" /s /b /a-d /on') do (
for /f "usebackq" %%b in (`Findstr /mic:"%~1" "%%a"`) do (
echo(&Echo Replacing "%~1" with "%~2" in file %%~nxa
<%%a cscript //nologo %temp%\_.vbs "%~1" "%~2">%tmp%
if exist %tmp% move /Y %tmp% "%%~dpnxa">nul
)
)
del %temp%\_.vbs
exit
:MakeReplace
>%temp%\_.vbs echo with Wscript
>>%temp%\_.vbs echo set args=.arguments
>>%temp%\_.vbs echo .StdOut.Write _
>>%temp%\_.vbs echo Replace(.StdIn.ReadAll,args(0),args(1),1,-1,1)
>>%temp%\_.vbs echo end with