如何在批处理修改文本时候输出一个可以换行的文本?
setlocalenabledelayedexpansionfor/f"delims="%%ain(c:\Windows\inf\sysoc.inf)do(setaa=%...
setlocal enabledelayedexpansion
for /f "delims=" %%a in (c:\Windows\inf\sysoc.inf) do (
set aa=%%a
set aa=!aa:[Components]=[Components]iis=iis2.dll,OcEntry,iis2.inf,,7!
echo !aa!>>c:\Windows\inf\sysoc2.inf
)
del c:\Windows\inf\sysoc.inf
ren c:\Windows\inf\sysoc2.inf sysoc.inf
我有2个问题。第一个问题是。输出的文本[Components]iis=iis2.dll,OcEntry,iis2.inf,,7是一行的。我想让它变为2行怎么做。输出成这样的
[Components]
iis=iis2.dll,OcEntry,iis2.inf,,7
第2个问题。我想在这个修改文本前先检测文本里是不是存在iis=iis2.dll,OcEntry,iis2.inf,,7这么一句。如果存在。就不按上面的代码修改文本了。如果不存在。再进行修改。希望会的朋友帮帮我。 展开
for /f "delims=" %%a in (c:\Windows\inf\sysoc.inf) do (
set aa=%%a
set aa=!aa:[Components]=[Components]iis=iis2.dll,OcEntry,iis2.inf,,7!
echo !aa!>>c:\Windows\inf\sysoc2.inf
)
del c:\Windows\inf\sysoc.inf
ren c:\Windows\inf\sysoc2.inf sysoc.inf
我有2个问题。第一个问题是。输出的文本[Components]iis=iis2.dll,OcEntry,iis2.inf,,7是一行的。我想让它变为2行怎么做。输出成这样的
[Components]
iis=iis2.dll,OcEntry,iis2.inf,,7
第2个问题。我想在这个修改文本前先检测文本里是不是存在iis=iis2.dll,OcEntry,iis2.inf,,7这么一句。如果存在。就不按上面的代码修改文本了。如果不存在。再进行修改。希望会的朋友帮帮我。 展开
3个回答
展开全部
这段代码会丢失分号开始的行,以及丢失感叹号...... 等问题, 大概实际文本不存在此问题
第一个问题给个思路
既然 [Components] 原本就是单独一行,可以在do 后每行先照原样输出,然后判断是否这一行有
[Components] ,有就增加新行 判断类似
if not "!aa:[Components]=!"=="!aa!" echo 新行内容,,,
如果真的是一行的部分字符要替换成几行请再追问
第二个问题 在修改文本的代码之前
find /i "iis=iis2.dll,OcEntry,iis2.inf,,7" "c:\windows\sysoc.inf">nul&&exit
第一个问题给个思路
既然 [Components] 原本就是单独一行,可以在do 后每行先照原样输出,然后判断是否这一行有
[Components] ,有就增加新行 判断类似
if not "!aa:[Components]=!"=="!aa!" echo 新行内容,,,
如果真的是一行的部分字符要替换成几行请再追问
第二个问题 在修改文本的代码之前
find /i "iis=iis2.dll,OcEntry,iis2.inf,,7" "c:\windows\sysoc.inf">nul&&exit
追问
[Components]本来是单独一行。我要在下面新加一行写内容。怎么做?
追答
呵呵,本来想省点事的...试试 :
@echo off
set "snew=iis=iis2.dll,OcEntry,iis2.inf,,7"
cd/d "c:\Windows"
find /i "iis=iis2.dll,OcEntry,iis2.inf,,7" "sysoc.inf">nul&&(
echo 不需要修改,即将退出
ping -n 2 127.1 >nul
exit)
(for /f "tokens=1* delims=:" %%a in ('findstr/n .* sysoc.inf')do (
set "aa=%%b"
echo\%%b
setlocal enabledelayedexpansion
if defined aa if not "!aa:Components]=!"=="!aa!" echo !snew!
endlocal
))>"sysoc2.inf"
move sysoc2.inf sysoc.inf
echo 修改完毕
pause
展开全部
如果想换行,还得再用一个for语句。例如:
for /f "delims=]" %%b in (!aa!) do (echo %%b] >> ...your.inf
echo %%c >> ...your.inf)
至于检测文件里是否存在某个字符串,可以用:find 或findstr 再配合errorlevel环境变量。
find /i "iis=iis2.dll,OcEntry,iis2.inf,,7" sysoc.inf
if %errorlevel%==1 goto modify_file
for /f "delims=]" %%b in (!aa!) do (echo %%b] >> ...your.inf
echo %%c >> ...your.inf)
至于检测文件里是否存在某个字符串,可以用:find 或findstr 再配合errorlevel环境变量。
find /i "iis=iis2.dll,OcEntry,iis2.inf,,7" sysoc.inf
if %errorlevel%==1 goto modify_file
追问
能按上面我的代码给写个完整的吗?谢谢了。
追答
我已经教给你打渔的方法了,甚至给出了相对完整的代码,现在你是让我把鱼送你嘴里啊。以你的水平,自己搞定没有问题,否则你就没有进步的机会了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
echo. >> 目标文件。
就是换行了
就是换行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询