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

[文本处理] [已解决]批处理结合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的参数我没设置好,不知如何设置才能得到我希望得到的效果。
1

评分人数

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

win7系统吧?wmic输出的是unicode格式,我喜欢这样转成ansi:
for /f ... in ('wmic datafile where "Extension='mof'" get name^|more') do ...

TOP

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
复制代码
代码有不对的地方吗?

TOP

1,如果数据不带空格或其他敏感字符,使用call传递
2,如果有,可以使用变量截取
3,不推荐使用 wmic datafile
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

批处理全盘搜索指定文件获取其完整路径
http://bbs.bathome.net/thread-3465-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

2# zm900612


跟unicode没啥关系,是行尾多了换行符,XP特有的问题,Vista/Win7里面不存在。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

嗯,没用过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命令将获取到的参数的最后一个字符删除。

TOP

返回列表