返回列表 发帖

[文件操作] 【已解决】BAT批处理如何查找文件并添加内容?

本帖最后由 fsxhome 于 2014-4-22 22:01 编辑

我近期在封装一个安装包,过程中需要在指定的xml文件中添加内容,特来请大侠们,帮写个批处理,好封装进去运行,先拜谢各位了!!

具体要求:
1、先查找“dll.xml文件”
64位系统中,文件位于“C:\Users\用户\AppData\Roaming\Microsoft\FSX”;
XP系统中,文件位于“C:\Documents and Settings\用户名\Application Data\Microsoft\FSX”

2、在"</SimBase.Document>"这一行之前,插入下列内容:
  <Launch.Addon>
    <Name>FSCopilot</Name>
    <Disabled>False</Disabled>
    <Path>Modules\FSCopilot.dll</Path>
  </Launch.Addon>
3、完成之后,在文件中,显示是这个样子的:
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

@echo off
set "s=  <Launch.Addon>#    <Name>FSCopilot</Name>#    <Disabled>False</Disabled>#    <Path>Modules\FSCopilot.dll</Path>#  </Launch.Addon>"
for /f "delims=" %%i in (dll.xml) do (
    set "str=%%i"
    setlocal enabledelayedexpansion
    if "!str: =!" == "</SimBase.Document>" (
       echo !s:#=^
!)
    echo !str!
    endlocal
)
pauseCOPY

TOP

本帖最后由 fsxhome 于 2014-4-22 19:43 编辑

额  太感谢了  测试下去

测试情况:
首先,非常感谢!

但测试不成功,运行bat,在bat内,可以看见字段添加进去了,但打开“dll.xml”却发现里面没内容。

另外,还缺少自动查找文件的命令。我是把BAT文件,打包到安装程序中运行,所以,这个BAT放不到“dll.xml所在的文件夹”。

TOP

@echo off
set "s=  <Launch.Addon>#    <Name>FSCopilot</Name>#    <Disabled>False</Disabled>#    <Path>Modules\FSCopilot.dll</Path>#  </Launch.Addon>"
(for /f "delims=" %%i in (dll.xml) do (
    set "str=%%i"
    setlocal enabledelayedexpansion
    if "!str: =!" == "</SimBase.Document>" (
       echo !s:#=^
!)
    echo !str!
    endlocal
))>dll.xml.new
move /y dll.xml.new dll.xmlCOPY

TOP

回复 4# DAIC

非常感谢!

代码可用,可完成操作,但添加的字段,格式不正确,要求和我发帖里面一样换行,空格啥的才行。

另外,还是不能自动查找文件。

TOP

@echo off
(for /f "delims=" %%i in (a.txt) do (
    set "str=%%i"
    setlocal enabledelayedexpansion
    if "!str: =!" == "</SimBase.Document>" (
        echo  ^<Launch.Addon^>
        echo    ^<Name^>FSCopilot^</Name^>
        echo    ^<Disabled^>False^</Disabled^>
        echo    ^<Path^>Modules\FSCopilot.dll^</Path^>
        echo  ^</Launch.Addon^>
    )
    echo !str!
    endlocal
))>b.txtCOPY

TOP

回复 6# DAIC

辛苦了,非常感谢!

这样操作,文件直接变成了空文件。。。

TOP

@echo off
(for /f "delims=" %%i in (dll.xml) do (
    set "str=%%i"
    setlocal enabledelayedexpansion
    if "!str: =!" == "</SimBase.Document>" (
        echo  ^<Launch.Addon^>
        echo    ^<Name^>FSCopilot^</Name^>
        echo    ^<Disabled^>False^</Disabled^>
        echo    ^<Path^>Modules\FSCopilot.dll^</Path^>
        echo  ^</Launch.Addon^>
    )
    echo !str!
    endlocal
))>dll.xml.new
move /y dll.xml.new dll.xmlCOPY

TOP

回复 8# DAIC

非常感谢,成功了。

接下来,要解决的问题,是先要查到"DLL.XML"所在的位置,再执行这段代码。

TOP

@echo off
if exist "C:\Users\%username%\AppData\Roaming\Microsoft\FSX\dll.xml" (
    set "file=C:\Users\%username%\AppData\Roaming\Microsoft\FSX\dll.xml"
) else if exit "C:\Documents and Settings\%username%\Application Data\Microsoft\FSX\dll.xml" (
    set "file=C:\Documents and Settings\%username%\Application Data\Microsoft\FSX\dll.xml"
) else (
    echo 找不到文件 dll.xml
    pause
    exit
)
(for /f "usebackq delims=" %%i in ("%file%") do (
    set "str=%%i"
    setlocal enabledelayedexpansion
    if "!str: =!" == "</SimBase.Document>" (
        echo  ^<Launch.Addon^>
        echo    ^<Name^>FSCopilot^</Name^>
        echo    ^<Disabled^>False^</Disabled^>
        echo    ^<Path^>Modules\FSCopilot.dll^</Path^>
        echo  ^</Launch.Addon^>
    )
    echo !str!
    endlocal
))>dll.xml.new
move /y dll.xml.new dll.xmlCOPY

TOP

回复 10# DAIC


    辛苦您了!

   我在桌面和文件所在的文件夹,都试了下,都是一闪而退,无任何提示,检查文件,发现不成功。

TOP

回复 11# fsxhome


    不要双击执行,去CMD窗口里面执行,看看是哪一行在报错。

TOP

回复 12# DAIC


    大侠,您有QQ吗,我水平查,试了好几种方法,没能在CMD窗口中运行起来BAT,可否加QQ请教您呢?

TOP

回复 13# fsxhome


开始
运行
cmd
C:\test.bat

TOP

开始我还以为运行错了呢,我是WIN8.1的系统,提示这个。

TOP

返回列表