2013-11-25 86 views
1

我有一個小腳本來編輯.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 

它沒有預期的效果,因爲它似乎從文件中刪除了很多數據。有沒有其他辦法可以做到這一點?

我只需要在關閉SSL壓縮的情況下替換###第3節:虛擬主機,同時保持文件的完整性。當前腳本似乎刪除空間也:(

非常感謝

+0

先將FOR行改爲:for/f「delims =」%% a in(text.tmp)do( – RGuggisberg

回答

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 
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(是經過深思熟慮的。 - 在這個字符序列中不是影響語句分組。

0

這使用稱爲從repl.bat一個幫手批處理文件 - 在同一個文件夾中的批處理文件或者是道路上的一個文件夾中https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

廣場repl.bat

搜索條件是一個正則表達式,但您的術語應該可以正常工作。

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