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

[文件操作] [已解决]请问批处理if用法:带temp的路径过滤掉

下面的结果的查找plus文件夹后得到的结果  贴上运行的代码
  1. dir /b /s /a:d plus
复制代码
D:\batsix\aaa\bbbb218\plus
D:\batsix\aaa\bbbb218\temp\plus
D:\batsix\aaa\bbbb219\plus
D:\batsix\aaa\bbbb219\temp\plus

请问大神们如何用bat 的if语句把上面的带temp的路径过滤掉
D:\batsix\aaa\bbbb218\temp\plus
D:\batsix\aaa\bbbb219\temp\plus

过滤后只留下面的两个路径就可以了
D:\batsix\aaa\bbbb218\plus
D:\batsix\aaa\bbbb219\plus

多谢了。

补充一下有其他的更好方法解决也可以哦

本帖最后由 qixiaobin0715 于 2021-9-29 20:32 编辑

如果是在for循环中for+dir \b \s \ad中的话:
for /f ... in ('dir \b \s \ad^|findstr /vr "temp"') do ...
1

评分人数

    • 2565549687: 感谢大神指点,原来可以用findstr过滤技术 + 1

TOP

本帖最后由 2565549687 于 2021-9-29 20:54 编辑

回复 2# qixiaobin0715
  1. dir \b \s \ad^|findstr /vr "temp"
复制代码
我只运行这一段代码就报错了
无效开关 - "vr"。

这段代码有问题吧?

下面的结果的查找plus文件夹后得到的结果

D:\batsix\aaa\bbbb218\plus
D:\batsix\aaa\bbbb218\temp\plus
D:\batsix\aaa\bbbb219\plus
D:\batsix\aaa\bbbb219\temp\plus

TOP

回复 3# 2565549687
在这里|不需要转义,单引号里面才需要。
dir \b \s \ad|findstr /vr "temp"

TOP

本帖最后由 2565549687 于 2021-9-29 21:08 编辑

回复 4# qixiaobin0715
  1.     for /f "delims=" %%i in ('dir /b /s /a:d plus^|findstr /vr "temp"') do (
  2. echo %%i
  3. )
复制代码
是单引号里面就需要转义吧?
感谢大神。最终我把我想要的代码调试出来了。

TOP

回复 5# 2565549687


不需要for命令吧,直接执行一句:
  1. dir /b /s /ad plus | findstr /v /r "temp"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5# 2565549687
实际上这样还是有问题的,比如当前文件夹下有一个plus文件夹的话,会出问题,可以试试看。

TOP

回复 7# qixiaobin0715


    是的还得加个过滤把其余的情况过滤掉的

TOP

本帖最后由 qixiaobin0715 于 2021-11-12 09:12 编辑

回复 8# 2565549687
以前碰到过这个问题,当时解决的办法是先dir指定目录下所有文件夹,再通过管道findstr过滤需要查找的文件夹:
  1. dir /b /s /ad | findstr /r "\\plus$" | findstr /v /r "\\temp\\"
复制代码
但是这样效率低。下面代码可能效率要高一些,但是觉得还不是太理想,期待高手来解决:
  1. dir /b /s /ad plus? | findstr /r "plus$" | findstr /v /r "\\temp\\"
复制代码

TOP

返回列表