找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 122292|回复: 34

[文件操作] [已解决]BAT批处理如何列只列出只底层的目录?

[复制链接]
发表于 2014-5-9 18:01:21 | 显示全部楼层 |阅读模式
本帖最后由 zhao3 于 2014-5-13 23:55 编辑

示例:我的D盘有以下目录
D:\A1\A11\A111\A1111
D:\A1\A12\A121\
D:\A2\A23\
D:\A3\
D:\A4\
D:\A5\

现在我想得到如下输出:
D:\A1\A11\A111\A1111
D:\A1\A12\A121\
D:\A2\A23\
D:\A3\
D:\A4\
D:\A5\
使用TREE命令,会出现各级目录,而我不需要出现含有子目录的目录名
D:\A1\
D:\A2\
D:\A1\A11\
D:\A1\A12\
D:\A1\A11\A111\

先谢谢各位大侠了。。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2014-5-9 21:08:59 | 显示全部楼层
  1. @echo off
  2. for /d /r "D:" %%a in (*) do (
  3.     for /d %%b in ("%%a\*") do set a=1
  4.     if defined a (set a=) else echo,%%a
  5. )
复制代码
发表于 2014-5-9 21:34:01 | 显示全部楼层
本帖最后由 CrLf 于 2014-5-10 04:28 编辑

算了还是用 bat + js 吧,各取其长:
  1. @if (0)==(0) echo off
  2. dir /ad /s /b | cscript /nologo /e:jscript %0 >a.txt
  3. pause&exit/b
  4. @end

  5. var text = WScript.StdIn.ReadAll().replace(/\r?\n/g,'\\\n').toLowerCase()

  6. var ar = text.split(/\n/).sort()
  7. for(var i=ar.length-1;i--;){
  8.    if(ar[i+1].indexOf(ar[i])==0){ar.splice(i,1)}
  9. }

  10. text = ar.join('\r\n').replace(/\\$/gm,'')
  11. WScript.Echo(text)
复制代码

评分

参与人数 2技术 +2 收起 理由
zhao3 + 1 解决了我的我实际的问题,谢谢。
apang + 1 for(var i=ar.length-1;i--;)学习了

查看全部评分

发表于 2014-5-9 22:01:20 | 显示全部楼层
本帖最后由 CrLf 于 2014-5-9 23:01 编辑

powershell 方案:
  1. $dr = get-childitem -Recurse
  2. $text = ForEach($_ in $dr){
  3.    if($_.PSIsContainer){
  4.       if(!$_.GetDirectories()){$_.FullName}
  5.    }
  6. )
  7. Set-Content -Encoding String -Value $text a.txt
复制代码
  1. Function list($Obj)
  2. {
  3.    if($DS = $Obj.GetDirectories()){
  4.       foreach($D in $DS){
  5.          list $D
  6.       }
  7.    } else {
  8.       $Obj.FullName
  9.    }
  10. }

  11. list (get-item .) | Set-Content -Encoding String a.txt
复制代码
 楼主| 发表于 2014-5-9 22:19:32 | 显示全部楼层
谢谢二楼,三楼,真的很谢谢你们。
我用的CrLf的方案,执行效果很好,60K的文件30S+就完成了,太棒了。
另请问一下,保存得到的文件是相当于是逆序保存的,能正序保存吗,如果不难的话,正序最好了,当然我可以在excel中倒一下也行。
=======================================
如果你是老师,我可以为你提供一些系统的教学资源;
如果你的孩子还是幼儿,我可以为你提供一些幼教资源;
如果以上资源你都用不上,请PM我一下您的话,我充一点话费,略表心意。
 楼主| 发表于 2014-5-9 22:20:09 | 显示全部楼层
如果以上资源你都用不上,请PM我一下您的电话,我充一点话费,略表心意。
发表于 2014-5-9 22:28:11 | 显示全部楼层
顺序保存只需要 sort 一下就行:
  1. sort a.txt /o a.txt
复制代码
发表于 2014-5-9 22:29:53 | 显示全部楼层
回复 5# zhao3


    楼主太客气了
 楼主| 发表于 2014-5-9 22:35:30 | 显示全部楼层
太强大了。。。。
成功,谢谢。
还是pm一下吧。
哈哈。。。。
发表于 2014-5-9 23:00:26 | 显示全部楼层
回复 3# CrLf
   
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Windows\System32>cd /d d:\test\

d:\test>dir /b /ad /s | sort /r
d:\test\新建文件夹\新建文件夹 - 副本
d:\test\新建文件夹 (2)\abc
d:\test\新建文件夹 (2)
d:\test\新建文件夹

d:\test>

这种情况下,貌似上下行比较会误判?
发表于 2014-5-9 23:02:40 | 显示全部楼层
回复 10# apang


    用的是 !last:%%a\=!,好像不会误判吧
 楼主| 发表于 2014-5-9 23:12:43 | 显示全部楼层
那跟贴再问一问:
提取目录内的第一个文件名作为目录名
因为目录名是无序的数字,里在文件名有意义。
发表于 2014-5-9 23:19:59 | 显示全部楼层
回复 12# zhao3


    不同问题请单独开贴
发表于 2014-5-9 23:35:26 | 显示全部楼层
回复 11# CrLf


   
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Windows\System32>cd /d d:\test\

d:\test>dir /b /ad /s | sort/r
d:\test\新建文件夹\新建文件夹 - 副本
d:\test\新建文件夹 2\abc
d:\test\新建文件夹 2
d:\test\新建文件夹
d:\test\abc

d:\test>test.bat

d:\test\新建文件夹\新建文件夹 - 副本
d:\test\新建文件夹 2\abc
d:\test\新建文件夹
请按任意键继续. . .

d:\test>

d:\test\新建文件夹 这一行按理说不应该显示出来?

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 感谢指正!

查看全部评分

 楼主| 发表于 2014-5-9 23:42:08 | 显示全部楼层
我的本意,是没有子目录的目录都列出来。有子目录的,列最底层目录。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 13:40 , Processed in 0.020195 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表