我有一个小脚本来编辑.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压缩的虚拟主机,同时保持文件的完整性。当前脚本似乎也删除了空格:(
非常感谢
答案 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
我已使用适合我系统的名称替换了您的路径名和文件名。您需要替换分配给originalpath
和originalname
的值以适合您的系统。
请注意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