使用批处理文件编辑文件

时间:2013-11-25 10:27:57

标签: batch-file edit

我有一个小脚本来编辑.conf文件中的文本。

SETLOCAL=ENABLEDELAYEDEXPANSION

    rename c:\users\administrator\desktop\httpd.conf text.tmp
    for /f %%a in (text.tmp) do (
        set foo=%%a
        if !foo!=="### Section 3: Virtual Hosts" set foo="SSL Compression off"
        echo !foo! >> c:\users\administrator\desktop\httpd.conf) 
del text.tmp

它没有所需的效果,因为它似乎从文件中删除了大量数据。有没有其他方法可以做到这一点?

我只需要替换###第3节:关闭SSL压缩的虚拟主机,同时保持文件的完整性。当前脚本似乎也删除了空格:(

非常感谢

3 个答案:

答案 0 :(得分:0)

试试这个:

@echo off
setlocal

call :FindReplace "### Section 3: Virtual Hosts" "SSL Compression off" httpd.conf

exit /b 

: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 /b

: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

答案 1 :(得分:0)

@ECHO OFF
SETLOCAL

SET originalpath=.
SET originalname=%originalpath%\q20189766.txt
rename %originalname% text.tmp
(for /f "delims=" %%a in (%originalpath%\text.tmp) do (
  if "%%a"=="### Section 3: Virtual Hosts" (ECHO(SSL Compression OFF
  ) ELSE (ECHO(%%a)
 )
) >%originalname%
del %originalpath%\text.tmp
GOTO :EOF

我已使用适合我系统的名称替换了您的路径名和文件名。您需要替换分配给originalpathoriginalname的值以适合您的系统。

请注意ECHO(是故意的 - (此字符序列中的 NOT 影响语句分组。

答案 2 :(得分:0)

这使用了来自 - https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

的名为repl.bat的帮助程序批处理文件

repl.bat放在与批处理文件相同的文件夹中或放在路径上的文件夹中。

搜索字词是正则表达式,但您的字词应该可以正常使用。

@echo off
type text.tmp | repl "### Section 3: Virtual Hosts" "SSL Compression off" > c:\users\administrator\desktop\httpd.conf