Board logo

标题: [文件操作] 【已解决】BAT批处理如何查找文件并添加内容? [打印本页]

作者: fsxhome    时间: 2014-4-22 18:07     标题: 【已解决】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、完成之后,在文件中,显示是这个样子的:

作者: terse    时间: 2014-4-22 19:04

  1. @echo off
  2. set "s=  <Launch.Addon>#    <Name>FSCopilot</Name>#    <Disabled>False</Disabled>#    <Path>Modules\FSCopilot.dll</Path>#  </Launch.Addon>"
  3. for /f "delims=" %%i in (dll.xml) do (
  4.     set "str=%%i"
  5.     setlocal enabledelayedexpansion
  6.     if "!str: =!" == "</SimBase.Document>" (
  7.        echo !s:#=^
  8. !)
  9.     echo !str!
  10.     endlocal
  11. )
  12. pause
复制代码

作者: fsxhome    时间: 2014-4-22 19:34

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

额  太感谢了  测试下去

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

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

另外,还缺少自动查找文件的命令。我是把BAT文件,打包到安装程序中运行,所以,这个BAT放不到“dll.xml所在的文件夹”。
作者: DAIC    时间: 2014-4-22 19:52

  1. @echo off
  2. set "s=  <Launch.Addon>#    <Name>FSCopilot</Name>#    <Disabled>False</Disabled>#    <Path>Modules\FSCopilot.dll</Path>#  </Launch.Addon>"
  3. (for /f "delims=" %%i in (dll.xml) do (
  4.     set "str=%%i"
  5.     setlocal enabledelayedexpansion
  6.     if "!str: =!" == "</SimBase.Document>" (
  7.        echo !s:#=^
  8. !)
  9.     echo !str!
  10.     endlocal
  11. ))>dll.xml.new
  12. move /y dll.xml.new dll.xml
复制代码

作者: fsxhome    时间: 2014-4-22 19:58

回复 4# DAIC

非常感谢!

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

另外,还是不能自动查找文件。
作者: DAIC    时间: 2014-4-22 20:16

  1. @echo off
  2. (for /f "delims=" %%i in (a.txt) do (
  3.     set "str=%%i"
  4.     setlocal enabledelayedexpansion
  5.     if "!str: =!" == "</SimBase.Document>" (
  6.         echo  ^<Launch.Addon^>
  7.         echo    ^<Name^>FSCopilot^</Name^>
  8.         echo    ^<Disabled^>False^</Disabled^>
  9.         echo    ^<Path^>Modules\FSCopilot.dll^</Path^>
  10.         echo  ^</Launch.Addon^>
  11.     )
  12.     echo !str!
  13.     endlocal
  14. ))>b.txt
复制代码

作者: fsxhome    时间: 2014-4-22 20:22

回复 6# DAIC

辛苦了,非常感谢!

这样操作,文件直接变成了空文件。。。
作者: DAIC    时间: 2014-4-22 20:24

  1. @echo off
  2. (for /f "delims=" %%i in (dll.xml) do (
  3.     set "str=%%i"
  4.     setlocal enabledelayedexpansion
  5.     if "!str: =!" == "</SimBase.Document>" (
  6.         echo  ^<Launch.Addon^>
  7.         echo    ^<Name^>FSCopilot^</Name^>
  8.         echo    ^<Disabled^>False^</Disabled^>
  9.         echo    ^<Path^>Modules\FSCopilot.dll^</Path^>
  10.         echo  ^</Launch.Addon^>
  11.     )
  12.     echo !str!
  13.     endlocal
  14. ))>dll.xml.new
  15. move /y dll.xml.new dll.xml
复制代码

作者: fsxhome    时间: 2014-4-22 20:32

回复 8# DAIC

非常感谢,成功了。

接下来,要解决的问题,是先要查到"DLL.XML"所在的位置,再执行这段代码。
作者: DAIC    时间: 2014-4-22 20:36

  1. @echo off
  2. if exist "C:\Users\%username%\AppData\Roaming\Microsoft\FSX\dll.xml" (
  3.     set "file=C:\Users\%username%\AppData\Roaming\Microsoft\FSX\dll.xml"
  4. ) else if exit "C:\Documents and Settings\%username%\Application Data\Microsoft\FSX\dll.xml" (
  5.     set "file=C:\Documents and Settings\%username%\Application Data\Microsoft\FSX\dll.xml"
  6. ) else (
  7.     echo 找不到文件 dll.xml
  8.     pause
  9.     exit
  10. )
  11. (for /f "usebackq delims=" %%i in ("%file%") do (
  12.     set "str=%%i"
  13.     setlocal enabledelayedexpansion
  14.     if "!str: =!" == "</SimBase.Document>" (
  15.         echo  ^<Launch.Addon^>
  16.         echo    ^<Name^>FSCopilot^</Name^>
  17.         echo    ^<Disabled^>False^</Disabled^>
  18.         echo    ^<Path^>Modules\FSCopilot.dll^</Path^>
  19.         echo  ^</Launch.Addon^>
  20.     )
  21.     echo !str!
  22.     endlocal
  23. ))>dll.xml.new
  24. move /y dll.xml.new dll.xml
复制代码

作者: fsxhome    时间: 2014-4-22 20:44

回复 10# DAIC


    辛苦您了!

   我在桌面和文件所在的文件夹,都试了下,都是一闪而退,无任何提示,检查文件,发现不成功。
作者: DAIC    时间: 2014-4-22 21:01

回复 11# fsxhome


    不要双击执行,去CMD窗口里面执行,看看是哪一行在报错。
作者: fsxhome    时间: 2014-4-22 21:14

回复 12# DAIC


    大侠,您有QQ吗,我水平查,试了好几种方法,没能在CMD窗口中运行起来BAT,可否加QQ请教您呢?
作者: DAIC    时间: 2014-4-22 21:15

回复 13# fsxhome


开始
运行
cmd
C:\test.bat
作者: fsxhome    时间: 2014-4-22 21:17

开始我还以为运行错了呢,我是WIN8.1的系统,提示这个。
作者: DAIC    时间: 2014-4-22 21:20

  1. @echo off
  2. if exist "C:\Users\%username%\AppData\Roaming\Microsoft\FSX\dll.xml" (
  3.     set "file=C:\Users\%username%\AppData\Roaming\Microsoft\FSX\dll.xml"
  4. ) else if exist "C:\Documents and Settings\%username%\Application Data\Microsoft\FSX\dll.xml" (
  5.     set "file=C:\Documents and Settings\%username%\Application Data\Microsoft\FSX\dll.xml"
  6. ) else (
  7.     echo 找不到文件 dll.xml
  8.     pause
  9.     exit
  10. )
  11. (for /f "usebackq delims=" %%i in ("%file%") do (
  12.     set "str=%%i"
  13.     setlocal enabledelayedexpansion
  14.     if "!str: =!" == "</SimBase.Document>" (
  15.         echo  ^<Launch.Addon^>
  16.         echo    ^<Name^>FSCopilot^</Name^>
  17.         echo    ^<Disabled^>False^</Disabled^>
  18.         echo    ^<Path^>Modules\FSCopilot.dll^</Path^>
  19.         echo  ^</Launch.Addon^>
  20.     )
  21.     echo !str!
  22.     endlocal
  23. ))>dll.xml.new
  24. move /y dll.xml.new dll.xml
复制代码

作者: fsxhome    时间: 2014-4-22 21:21

我觉得问题可能是这样的,代码中,可能没有跳过某个命令的字段,是在按顺序查找文件,当执行到下一个查找时,发现没文件,就退出运行了。

也不知道说的对不对,错了勿怪!!!
作者: DAIC    时间: 2014-4-22 21:27

回复 17# fsxhome


    16楼的代码试过没?
作者: fsxhome    时间: 2014-4-22 21:29

回复 16# DAIC

提示这错误
作者: DAIC    时间: 2014-4-22 21:32

回复 19# fsxhome


把 @echo off 删掉,再执行一次,看看哪一行在报错。
另外,用记事本打开bat,文件,另存为,看看编码是不是ANSI
作者: fsxhome    时间: 2014-4-22 21:38

回复 20# DAIC


    大侠:

    抱歉,之前是我复制粘贴时,代码格式发生了变化。

   16楼的代码是可以成功执行的,但还是有个问题,他执行后,生成的文件,是在BAT文件所在的位置,不是在原位置。
作者: DAIC    时间: 2014-4-22 21:46

回复 21# fsxhome
  1. @echo off
  2. if exist "C:\Users\%username%\AppData\Roaming\Microsoft\FSX\dll.xml" (
  3.     set "file=C:\Users\%username%\AppData\Roaming\Microsoft\FSX\dll.xml"
  4.     set "folder=C:\Users\%username%\AppData\Roaming\Microsoft\FSX"
  5. ) else if exist "C:\Documents and Settings\%username%\Application Data\Microsoft\FSX\dll.xml" (
  6.     set "file=C:\Documents and Settings\%username%\Application Data\Microsoft\FSX\dll.xml"
  7.     set "folder=C:\Documents and Settings\%username%\Application Data\Microsoft\FSX"
  8. ) else (
  9.     echo 找不到文件 dll.xml
  10.     pause
  11.     exit
  12. )
  13. (for /f "usebackq delims=" %%i in ("%file%") do (
  14.     set "str=%%i"
  15.     setlocal enabledelayedexpansion
  16.     if "!str: =!" == "</SimBase.Document>" (
  17.         echo  ^<Launch.Addon^>
  18.         echo    ^<Name^>FSCopilot^</Name^>
  19.         echo    ^<Disabled^>False^</Disabled^>
  20.         echo    ^<Path^>Modules\FSCopilot.dll^</Path^>
  21.         echo  ^</Launch.Addon^>
  22.     )
  23.     echo !str!
  24.     endlocal
  25. ))>dll.xml.new
  26. move /y dll.xml.new "%folder%\dll.xml"
复制代码

作者: fsxhome    时间: 2014-4-22 21:48

回复 22# DAIC


    成功了呀,大神,太佩服您了,太感谢您了,非常感谢您的热诚帮助!!!!
作者: DAIC    时间: 2014-4-22 21:49

回复 23# fsxhome


    问题解决后,请编辑顶楼帖子在标题前面注明[已解决],并给回答者加分。
作者: fsxhome    时间: 2014-4-22 22:03

回复 24# DAIC


    注册不足24小时,评分受限制,明天来评分哈!


   大神留个QQ给我把,发消息就好了。
作者: DAIC    时间: 2014-4-22 22:08

回复 25# fsxhome


    不聊qq,有问题就来论坛讨论吧。
作者: fsxhome    时间: 2014-4-22 22:15

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

回复 26# DAIC


     好的呀,非常感谢!

    有空来我论坛玩玩哦: 模拟飞行之家 www.fsxhome.com.cn




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2