如何使用批处理脚本批量更新文件?

时间:2015-06-17 05:06:07

标签: windows batch-file cmd

我们有多个批处理脚本(大约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"

1 个答案:

答案 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