标题: [文件操作] 【已解决】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
- @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
- )
- 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
- @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.xml
复制代码
作者: fsxhome 时间: 2014-4-22 19:58
回复 4# DAIC
非常感谢!
代码可用,可完成操作,但添加的字段,格式不正确,要求和我发帖里面一样换行,空格啥的才行。
另外,还是不能自动查找文件。
作者: DAIC 时间: 2014-4-22 20:16
- @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.txt
复制代码
作者: fsxhome 时间: 2014-4-22 20:22
回复 6# DAIC
辛苦了,非常感谢!
这样操作,文件直接变成了空文件。。。
作者: DAIC 时间: 2014-4-22 20:24
- @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.xml
复制代码
作者: fsxhome 时间: 2014-4-22 20:32
回复 8# DAIC
非常感谢,成功了。
接下来,要解决的问题,是先要查到"DLL.XML"所在的位置,再执行这段代码。
作者: DAIC 时间: 2014-4-22 20:36
- @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.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
- @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 exist "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.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 - @echo off
- if exist "C:\Users\%username%\AppData\Roaming\Microsoft\FSX\dll.xml" (
- set "file=C:\Users\%username%\AppData\Roaming\Microsoft\FSX\dll.xml"
- set "folder=C:\Users\%username%\AppData\Roaming\Microsoft\FSX"
- ) else if exist "C:\Documents and Settings\%username%\Application Data\Microsoft\FSX\dll.xml" (
- set "file=C:\Documents and Settings\%username%\Application Data\Microsoft\FSX\dll.xml"
- set "folder=C:\Documents and Settings\%username%\Application Data\Microsoft\FSX"
- ) 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 "%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 |