Board logo

标题: [文本处理] 批处理怎样对外部程序的执行结果查找字符串,如果存在该字符并执行程序? [打印本页]

作者: psstudio    时间: 2017-1-16 11:47     标题: 批处理怎样对外部程序的执行结果查找字符串,如果存在该字符并执行程序?

比如说执行DIR C: 这个命令,执行结果是多行字符,我用
  1. for /f "delims=" %%a in ('dir c:') do (
  2. if not exist "Music" do MD Music
  3. PAUSE
复制代码
这个批处理好像并不能实现,请教大神用什么样的办法可以实现? 不要重定向到文件去二次处理!直接用FOR/F 可以实现吗? 或者这种要查找多行字符串的命令一定要用到findstr吗?
作者: flyinnet9    时间: 2017-1-16 14:31

本帖最后由 flyinnet9 于 2017-1-16 14:42 编辑

写脚本嘛,怎么简单怎么写,有简单的方法,为什么要用笨的方法?
  1. dir c:\  /ad /b |findstr /i "music" ||md music
复制代码
  1. if not exist c:\music\ md music
复制代码
  1. for /f "delims=" %%a in ('dir c:\ /ad /b') do if /i "%%a"=="music" set f=1
  2. if not defined f md music
复制代码

作者: pcl_test    时间: 2017-1-16 18:25

回复 2# flyinnet9

用findstr还是加上匹配首尾比较严谨
作者: psstudio    时间: 2017-1-17 22:42

dir c:\  /ad /b |findstr /i "music" ||md music
这条代码简单,但是有个问题,比如说换成tree /F c:\tools   | findstr /i "LanPing.cmd"   || md 12
c:\tools目录里有这个文件但并不能建立目录,只会显示出该文件名。这个怎么解决??? 是FINDSTR的参数不够吗?
作者: psstudio    时间: 2017-1-17 22:47

经过测试楼上朋友的方法只针对 单行数据有效,如果一行数据里包含其它字符,上面这些命令都无效!~
作者: Nsqs    时间: 2017-1-17 22:50

本帖最后由 Nsqs 于 2017-1-17 22:53 编辑

回复 5# psstudio


   
运行输入 cmd /k dir/? 可以看到参数/ad改为/a-d就可以创建以文件名命名的文件夹
dir /b /a-d|findstr /i "music"   ||md "music"
作者: psstudio    时间: 2017-1-17 22:52

比如说:像 pid=1756, owner=WIN7PROSP1\Administrator, cmd=cmd /c ""D:\Soft\nettest.bat" "
这类输出结果中查找指定字符串就无能为力了~,这类结果又有,号又有空格,还有/号 \号 :号。处理起来是不是很麻烦???
作者: GNU    时间: 2017-1-18 13:18

回复 5# psstudio


    写代码是一件非常严谨的事情,你需要先把自己的需求、测试数据、希望得到的结果等信息描述完整,而不是别人给出代码之后你又说需求变啦所以代码不能用。
作者: GNU    时间: 2017-1-18 13:18

回复 7# psstudio


    这类输出结果中查找哪个指定字符串?
作者: psstudio    时间: 2017-1-19 00:38

比如说像这个, pid=1756, owner=WIN7PROSP1\Administrator, cmd=cmd /c ""D:\Soft\nettest.bat" "  
我要查找nettest.bat 这个字符串是否存在,比如万一这个程序名字变了就查找不到了。。。
nettest.bat这个字符串不存在就运行另外一条命令~
作者: GNU    时间: 2017-1-19 09:36

回复 10# psstudio


C:\>echo pid=1756, owner=WIN7PROSP1\Administrator, cmd=cmd /c ""D:\Soft\nettest.bat" " | findstr "nettest.bat"
pid=1756, owner=WIN7PROSP1\Administrator, cmd=cmd /c ""D:\Soft\nettest.bat" "

我这里测试没有发现问题
作者: psstudio    时间: 2017-1-19 20:37

本帖最后由 pcl_test 于 2017-1-19 22:22 编辑

回复 11# GNU
可能楼上的大哥没有理解到我的意思,你这个测试是正确的!
但是我比如说echo pid=1756, owner=WIN7PROSP1\Administrator, cmd=cmd /c ""D:\Soft\nettest.bat" " | findstr "nettest.bat" ||md 12
这一句,是不是应该这样理解,当这个字符串在前面的文字里能查找到就建立目录12? 但是,我测试不管能不能查找到都会建立。。所以我说上面这个语句应该是有问题的!
作者: psstudio    时间: 2017-1-19 22:09

还是用ERRORLEVEL来判定是比较准确 的~。。。感谢各位大哥。。。
作者: Batcher    时间: 2017-1-19 23:06

回复 12# psstudio


我测试的结果:
查找到,不创建。
查找不到,创建。




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