[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何取得目录下的文件名输出到xml文件?

我有一个目录,D:\dist\lib ,下面有一些文件夹以及很多文件(不都是*.jar),我想把其中的*.jar文件输出到xml文件中
格式如下,其中只有path的内容是变化的。
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <classpath>
  3.     <classpathentry kind="lib" path="dist/lib/jstl.jar"/>
  4.     <classpathentry kind="lib" path="dist/lib/jta101.jar"/>
  5.     <classpathentry kind="lib" path="dist/lib/jTDS2.jar"/>
  6.     <classpathentry kind="lib" path="dist/lib/junit.jar"/>
  7. </classpath>
复制代码
我现在可以输出XML文件了,但是如何取得所有文件名,循环输出呢?
  1. set classpath_name=.classpath
  2. echo ^<?xml version="1.0" encoding="UTF-8" ?^> >%classpath_name%
  3. echo ^<classpath^> >>%classpath_name%
  4. echo ^    ^<classpathentry kind="lib" path="dist/lib/jstl.jar"/^> >>%classpath_name%
  5. echo ^    ^<classpathentry kind="lib" path="dist/lib/jta101.jar"/^> >>%classpath_name%
  6. echo ^    ^<classpathentry kind="lib" path="dist/lib/jTDS2.jar"/^> >>%classpath_name%
  7. echo ^    ^<classpathentry kind="lib" path="dist/lib/junit.jar"/^> >>%classpath_name%
  8. echo ^</classpath^> >>%classpath_name%
复制代码
我看了一个用for /r 取得文件全路径的
  1. set DstDir=D:\dist\lib
  2. for /r %DstDir% %%i in (*.jar) do (
  3.   @echo %%i
  4. rem )
复制代码
但是会带上D:\...的路径,如何去掉呢?

[ 本帖最后由 michael_hy 于 2010-4-17 09:11 编辑 ]
1

评分人数

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

  1. SETLOCAL ENABLEDELAYEDEXPANSION
  2. for /f %%i in ('dir /s /b d:\test *.jar') do (
  3.       set "file_path=%%~pnxi"
  4.       set "file_path=!file_path:\=/!"
  5.       set "file_path=!file_path:~1!"
  6.       echo ^    ^<classpathentry kind="lib" path="!file_path!"/^> >>%classpath_name%
  7. )
复制代码

[ 本帖最后由 caruko 于 2010-4-16 16:26 编辑 ]

TOP

非常感谢您的回复。
请问dir /s /b 的参数是启什么作用呢?
%%~pnxi是什么意思呢?
如果我的jar文件是在的d:\ Code\dev\proddev\dist\lib\jstl.jar
而我在xml中只想输出dist\lib\jstl.jar,就是去掉d:\ Code\dev\proddev\
应该怎么写呢?

[ 本帖最后由 michael_hy 于 2010-4-16 16:45 编辑 ]

TOP

回复 3楼 的帖子

先去看看dir和for的帮助吧,你的前两个疑问可以解决的。

TOP

如果%%i=d:\test\dist\lib\abc.jar
那么%%~pnxi=\test\dist\lib\abc.jar         p代表路径,n代表文件名,x代表后缀,组合起来就是去掉了驱动器号
dir /s /b 也会搜索子文件夹,并且显示完整路径
set file_path=!file_path:~1! 表示删除第一个字符,你要自定义路径,可以自己指定删除几个字符,"\Code\dev\proddev\"是18个字符,你可以用!file_path:~18! 或者 !file_path:=Code\dev\proddev\! , 字符替换如果有:存在,处理就会很麻烦,所以首先去掉了"d:"
1

评分人数

TOP

非常感谢您的帮忙~~

TOP

返回列表