Board logo

标题: [文件操作] [已解决]批处理怎样遍历文件夹,删除只有包含一个文件的文件夹 [打印本页]

作者: swanseabrian    时间: 2021-9-21 15:31     标题: [已解决]批处理怎样遍历文件夹,删除只有包含一个文件的文件夹

本帖最后由 swanseabrian 于 2021-9-22 11:20 编辑

遍历文件夹,删除只有包含一个文件的文件夹
请问这个要怎么操作呢,谢谢
作者: idwma    时间: 2021-9-21 17:27

本帖最后由 idwma 于 2021-9-21 17:28 编辑
  1. powershell "(dir -ex *.* -r)|foreach{if ((dir $_.fullname|measure|foreach{$_.count}) -eq 1){del -r $_.fullname}}"
复制代码

作者: qixiaobin0715    时间: 2021-9-22 09:58

回复 1# swanseabrian
这个应当勉强能用,未经测试:
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /s /ad') do (
  3.     pushd %%i
  4.     for /f %%j in ('dir^|findstr /r /c:" 1 个文件"') do rd /s /q %%i
  5.     popd
  6. )
  7. pause
复制代码

作者: swanseabrian    时间: 2021-9-22 10:24

回复 3# qixiaobin0715


    for /f "delims=" %%a in ('dir /b /s /a-d^|findstr /r "详细信息\\[^\\]*.txt$"') do ren "%%a" "introduce.txt"
这句啥意思呀   \\[^\\]
这四个杠啥意思
我把[^\\]去掉就搜索不到了
作者: qixiaobin0715    时间: 2021-9-22 10:41

\\是转义,表示一个反斜杠。可以去学学findstr命令。
作者: qixiaobin0715    时间: 2021-9-22 10:45

[^\\]表示非反斜杠的字符。
作者: swanseabrian    时间: 2021-9-22 11:03

回复 6# qixiaobin0715


    加这个非反斜杠干啥  
详情信息\*.txt
第一个转义我能理解,这个非反斜杠是干啥的,*.txt 难道不行吗
作者: qixiaobin0715    时间: 2021-9-22 11:07

findstr中的*意义与别处不一样。
请查看findstr中的帮助文档。
作者: qixiaobin0715    时间: 2021-9-22 11:11

findstr /?
作者: swanseabrian    时间: 2021-9-22 11:19

回复 8# qixiaobin0715


    >dir /b /s /a-d|findstr /s "计数\\*.txt
不用/r正则就可以了,你加了正则,都是按正则的标准走的,好的
作者: qixiaobin0715    时间: 2021-9-22 11:22

回复 10# swanseabrian

行吗?
作者: swanseabrian    时间: 2021-9-22 11:50

C:\Users\Administrator\Desktop\bat\4dot1\新建文件夹\解放战争>dir /b /s /a-d|findstr /s "计数\\*.txt
C:\Users\Administrator\Desktop\bat\4dot1\新建文件夹\解放战争\Temp\0001_柏志忠\计数\计数.txt
C:\Users\Administrator\Desktop\bat\4dot1\新建文件夹\解放战争\Temp\0002_柏永良\计数\计数.txt
C:\Users\Administrator\Desktop\bat\4dot1\新建文件夹\解放战争\Temp\0003_包江甫\计数\计数.txt
C:\Users\Administrator\Desktop\bat\4dot1\新建文件夹\解放战争\Temp\0004_包金其\计数\计数.txt
C:\Users\Administrator\Desktop\bat\4dot1\新建文件夹\解放战争\Temp\0005_包丕高\计数\计数.txt
C:\Users\Administrator\Desktop\bat\4dot1\新建文件夹\解放战争\Temp\0006_包尚芝\计数\计数.txt
C:\Users\Administrator\Desktop\bat\4dot1\新建文件夹\解放战争\Temp\0007_包锡祥\计数\计数.txt
C:\Users\Administrator\Desktop\bat\4dot1\新建文件夹\解放战争\Temp\0008_包学德\计数\计数.txt
C:\Users\Administrator\Desktop\bat\4dot1\新建文件夹\解放战争\Temp\0009_卑孔奎\计数\计数.txt
C:\Users\Administrator\Desktop\bat\4dot1\新建文件夹\解放战争\Temp\0010_卞维端\计数\计数.txt
C:\Users\Administrator\Desktop\bat\4dot1\新建文件夹\解放战争\Temp\0011_蔡邦基\计数\计数.txt
C:\Users\Administrator\Desktop\bat\4dot1\新建文件夹\解放战争\Temp\0012_蔡邦清\计数\计数.txt
作者: qixiaobin0715    时间: 2021-9-22 13:27

回复 12# swanseabrian
也不对!!!
你看到的只是表面现象,上面搜索到的只是“计数.txt”,并不是文件夹“计数”,如果文件夹“计数”中不含“计数.txt”文件,就搜不到。
作者: qixiaobin0715    时间: 2021-9-22 13:34

不信的话,你可以把搜索字符改为"计数.txt",会得到同样结果。
作者: swanseabrian    时间: 2021-9-22 13:51

回复 14# qixiaobin0715


    计数\\*.txt
这个不是表示计数文件夹里的东西吗
作者: qixiaobin0715    时间: 2021-9-22 14:24

你说的不就是http://www.bathome.net/thread-60052-1-1.html中的代码吗?
详细信息\\——表示文件夹“详细信息”和代表路径结束的反斜杠。
[^\\]*.txt$——这部分才表示上面文件夹中的文件名及扩展名。
作者: qixiaobin0715    时间: 2021-9-22 14:26

你没有理解对,所以改的也是错误的。
作者: swanseabrian    时间: 2021-9-22 17:34

回复 17# qixiaobin0715


    dir /b /s /a-d|findstr /s "计数\\*.txt"
那我这个是表示啥
作者: qixiaobin0715    时间: 2021-9-22 18:10

本帖最后由 qixiaobin0715 于 2021-9-22 18:17 编辑

回复 18# swanseabrian
关键是你自己要表达什么,按字面意思分析的话,应当匹配下面条件的字符:
计数+0到若干个反斜杠+任意一个字符+txt
所以从可能性上分析,能够匹配“计数.txt”这样的字符。因为0个反斜杠也符合匹配条件。
其中的.在findstr中可表示任意一个字符,如果我就要表示点号的话,就应当转义,正确表达点号应当是:\.
作者: swanseabrian    时间: 2021-9-22 18:34

回复 19# qixiaobin0715


    那只能用正则表达了? /s也没用对吧
作者: qixiaobin0715    时间: 2021-9-22 18:46

本帖最后由 qixiaobin0715 于 2021-9-22 18:49 编辑

你在findstr中用/s没什么用啊?用/r是个好习惯,虽然有时可以省略。
findstr中使用的不是通常意义上的正则,叫一般表达式更贴切。
作者: swanseabrian    时间: 2021-9-22 18:49

回复 21# qixiaobin0715


    行吧,那用正则 吧还是
作者: qixiaobin0715    时间: 2021-9-22 18:52

回复 22# swanseabrian
我给出的代码不行吗?为什么要修改?
作者: swanseabrian    时间: 2021-9-22 19:16

回复 23# qixiaobin0715


    行,我就是想尝试一下




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