Board logo

标题: [文件操作] [已解决]批处理怎样在很多目录中过滤出没有子目录的目录并归档? [打印本页]

作者: MRhythm    时间: 2020-11-20 00:14     标题: [已解决]批处理怎样在很多目录中过滤出没有子目录的目录并归档?

本帖最后由 MRhythm 于 2020-11-20 18:34 编辑

公共的共享空间, 本来是用于存放一些周报等信息的, 但是由于操作不是很规范, 目录结构十分混乱, 比如A目录下可能有B目录, B目录下又有C目录

比如
A\
A\A1.TXT
A\A2.TXT
A\A3.TXT
A\B\
A\B\B1.TXT
A\B\B2.TXT

各个目录基本没有重名, 现在需求是使用批处理, 找出没有子目录的目录, 并将该目录移动到其他地方归档. 用for反复尝试一下效果都不是很理想.

简单分析一下就是
需要处理一个大目录, 层级, 文件数量, 结构均不清楚
如果某个目录下没有子目录, 或者为空, 则移动该目录到指定路径
如果某个目录下有子目录, 则不进行任何操作
作者: Batcher    时间: 2020-11-20 00:58

回复 1# MRhythm


    根据不同的场景,请分别举例说明哪些移动哪些不移动。
作者: MRhythm    时间: 2020-11-20 01:23

其实就是把没有子目录的目录移动一下就可以了

只要符合"没有子目录"这个条件, 就一并移走. 批处理本身造成的目录变化不在考虑范围, 能一次移走最好, 不能的话无非多运行几次
作者: qixiaobin0715    时间: 2020-11-20 08:34

本帖最后由 qixiaobin0715 于 2020-11-20 08:37 编辑

参考
http://www.bathome.net/viewthrea ... &from=favorites
2楼代码
按自己的需求修改
作者: MRhythm    时间: 2020-11-20 10:54

本帖最后由 MRhythm 于 2020-11-20 11:06 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cls
  4. set /p sourcePath="请键入需要处理的根目录并回车, 例如 d:\files:"
  5. set /p outputPath="请键入输出压缩文件的目录并回车, 例如 d:\output:"
  6. set mark=0
  7. for /f %%i in ('dir /b /s /ad %sourcePath%') do (
  8.     set mark=0
  9.     for /f %%o in ('dir /b /ad %%i') do (set mark=1)
  10.     if !mark!==0 (echo 正在处理%%i
  11.     "C:\Program Files\WinRAR\Rar.exe" a -r o+ -ep1 %outputPath%\%%~ni %%i\*)
  12. )
复制代码
根据楼上提供的思路自己写了一个, 最后想了一下还是没有用移动文件这种不可逆操作, 借助winrar的打包功能来处理重名等问题




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