Board logo

标题: [文本处理] [已解决]批处理结合WMIC获取文件路径怎样去掉行末带换行? [打印本页]

作者: escortmnm    时间: 2011-4-22 16:17     标题: [已解决]批处理结合WMIC获取文件路径怎样去掉行末带换行?

用wmic命令的datefile全盘查找指定扩展名的文件并获取其全名的代码:
  1. @echo off
  2. echo 正在搜索,请等待……
  3. for /f "skip=1 tokens=* eol=" %%a in ('wmic datafile where "Extension='mof'" get name') do (
  4. echo "%%a")
  5. pause
复制代码
输出的结果如下:

可以发现获取到的文件名后面莫名其妙地多了个换行符,导致双引号的第二半被换行了
如何解决?
怎样才能让获取到的文件是个真实的路径即通过判断文件存在检验是否满足条件:
  1. @echo off
  2. echo 正在搜索,请等待……
  3. for /f "skip=1 tokens=* eol=" %%a in ('wmic datafile where "Extension='mof'" get name') do (
  4. if not exist "%%a" echo 如果显示了本句话,测试失败。)
  5. pause
复制代码
请知道的朋友不吝赐教,小弟感激不尽!

for/f的参数我没设置好,不知如何设置才能得到我希望得到的效果。
作者: CrLf    时间: 2011-4-22 16:30

win7系统吧?wmic输出的是unicode格式,我喜欢这样转成ansi:
for /f ... in ('wmic datafile where "Extension='mof'" get name^|more') do ...
作者: escortmnm    时间: 2011-4-22 18:21

2# zm900612

我的是XPSP3系统,用了你的代码还是没成功:
  1. @echo off&setlocal enabledelayedexpansion
  2. echo 正在搜索,请等待……
  3. for /f "skip=1 tokens=*" %%a in ('wmic datafile where "Extension='ppt'" get name ^|more') do (
  4. echo %%a
  5. if not exist "%%a" echo 如果显示了本句话,测试失败。)
  6. pause
复制代码
代码有不对的地方吗?
作者: hanyeguxing    时间: 2011-4-22 19:19

1,如果数据不带空格或其他敏感字符,使用call传递
2,如果有,可以使用变量截取
3,不推荐使用 wmic datafile
作者: Batcher    时间: 2011-4-22 19:31

批处理全盘搜索指定文件获取其完整路径
http://bbs.bathome.net/thread-3465-1-1.html
作者: Batcher    时间: 2011-4-22 19:34

2# zm900612


跟unicode没啥关系,是行尾多了换行符,XP特有的问题,Vista/Win7里面不存在。
作者: escortmnm    时间: 2011-4-22 19:40

嗯,没用过WIN7,我现在用的是XP。问题刚刚已经解决了,方法如下:
  1. @echo off&setlocal enabledelayedexpansion
  2. echo 正在搜索,请等待……
  3. for /f "skip=1 delims=" %%a in ('wmic datafile where "Extension='ppt'" get name') do (
  4. set n=%%a
  5. set n=!n:~,-1!
  6. echo !n!
  7. if not exist "!n!" echo 如果显示了本句话,测试失败。)
  8. pause
复制代码

方法:
用set命令将获取到的参数的最后一个字符删除。





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