【Batch】批量删除中间文件夹-个人研究脚本

【项目介绍】

       如该树状图所示,博主在下载网上资源时,遇到如下图所示的情况:一个名为“1”的目录下只有一个同名为“1”的子目录,这个子目录下包含若干文件(这里以1.txt代表),博主在打开文件的时候需要来回点前进后退,不胜其烦,于是想要把中间目录(那个重名的“1”文件夹)给删掉,直接的办法是ctrl+a全选子文件,将其剪切到第一个“1”文件夹下,再将重名的“1”子目录删掉,然而这不适用于大量的中间目录需要删除的情况(总不能一个个点吧?多繁琐),于是博主研究了Batch批处理相关的知识,做了一个批量删除中间目录的脚本,基本实现了预期效果,但其中也有很多笨拙的地方,还望高手斧正。
当前目录下有五个目录,各自包含一个同父名的子目录,子目录里有若干文件

【代码展示】

batch基础:在想要处理的文件夹里新建一个空txt文档,修改后缀为.bat,右键选择[编辑],将相关batch代码填入,双击即可运行。

一、测试目录(仅供展示效果,非主程序)

此段代码的作用是创建一个像【介绍】中图片所展示的树状目录结构,以供测试及展示效果

@echo off

md ceshi
cd ceshi
for /L %%i in (1,1,5) do (
    md %%i
    cd %%i
    md %%i
    cd %%i
    echo >%%i.txt
    cd ..
    cd ..
)
tree /F >tree.txt

二、主程序

前言:将该bat文件置于ceshi文件夹外与其并列
思想:其实就是模拟人为ctrl+a全选、剪切、删除的操作

@echo off
::进入ceshi文件夹
cd ceshi
::遍历ceshi文件夹的所有子目录(不包含子目录的子目录)
for /D %%a in (*) do (
    ::进入一级子目录
    cd %%a
    ::子目录下只有一个同名的二级子目录,打开这个子目录后是各种文件
    ::方法即是将里面的文件全部拿出来与二级子目录并列,再把这个子目录删除
    
    ::先遍历一级子目录,查看是否只有一个同名的二级子目录
    for /D %%b in (*) do (
        ::主程序,若情况符合预期,进入二级子目录
        if %%a == %%b (
            cd %%b
            ::先移动所有三级子目录
            for /d %%c in (*) do (
                move "%%c" ..
            )
            ::再移动所有三级文件
            for /r %%d in (*) do (
                move "%%~nxd" ..
            )
            ::最后退出二级子目录,并删除(/q表示静默,防止总是询问)
            cd ..
            rd /q "%%b"
        )
    )

    ::退出一级子目录
    cd ..
)

三、相关重要知识点

1. for /D %%a in (*) do ()

for语句是batch指令的重要内容,主要的关键参数有/R、/D、/R /D,以下是博主总结的这三种参数使用会产生的效果:

/D 表示指定该目录下所有子目录(不包含子目录的子目录)
/R (后面不附加路径时)表示指定该目录下所有文件(包括子目录的子目录、文件)
/D /R 表示指定该目录下所有子目录(包括子目录的子目录)

2. ~nxI 扩展命令

主程序中“再移动所有三级文件”部分中,使用到了%%~nxd,其实其就是%%d的简化版,表示只有文件名和拓展名,目的是配合move语句

3. move “%%~nxd” …

同上,须给%%~nxd加上双引号,表示这是文件名,因为有的文件是带有空格的,转移这样的文件程序会报错,添加双引号后任何奇怪的文件名都不会影响命令的执行

【效果展示】在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值