写在前面
文件的批处理可以帮我们节约大量的时间及精力。最近网上冲浪的时候找到一些不错的资源,赶紧保存,但是下载下来后发现资源实在是太套娃了。。。虽说是全集不假,但是一层套着一层,让人心累。想到批处理的方法,能不能用脚本帮我把文件都提取出来呢?
说干就干,大不了临阵磨枪现学现卖呗~
问题分析
简单形容一下我遇到的问题:
一个大文件夹,里面是二级目录,在里面又有一层,再往里面才是我们需要的文件。
东西是好东西~但是套路太多了。。。
我希望把所有笔刷的.abr文件全部提取到一个文件夹里面,这样看起来也会比较直观。
解决方法
首先了解什么是批处理
批处理文件(batch file)包含一系列 DOS命令,通常用于自动执行重复性任务。用户只需双击批处理文件便可执行任务,而无需重复输入相同指令。编写批处理文件非常简单,但难点在于确保一切按顺序执行。
我们的需求非常简单,暂时不用了解那么多,采用基本的语法就可以实现了。
既然有这么多文件夹,那一定要想办法遍历访问到每一个文件
遍历访问命令:
for [参数] %%变量名 in (匹配符) do (执行的命令)
需要注意的是 命令中各指令间需要用空格隔开;
命令中的匹配符是可以添以文件路径的;
命令中可以使用的参数有4种,分别是 /d /r /l /f 也可以不加参数,其中参数 /r较特殊,该参数的作用是可以进行深度遍历,不仅可以访问到当前路径下的文件,还可以访问到其子文件下的内容。
我们的问题比较简单,就不多做解释了。
编写脚本 创建一个文本文档
cd /d E:\Adobe\162款Photoshop炒鸡实用笔刷包集合
for /r %%a in (*.abr) do (copy %%a E:\Adobe\笔刷合集包)
pause
第一行: 进入到需要操作的文件路径,不难理解
第二行:使用参数 /r 意为采取深度遍历,按顺序将当前路径下的后缀为.abr的文件绝对路径赋给参数 %%a ,并将此文件复制到文件路径 E:\Adobe\笔刷合集包 下
第三行: pause 作用是执行到此处时暂停,一般脚本执行速度极快,这样可以观察输出结果
将文本文档另存,并将后缀改为 .bat
双击运行即可
如果执行中出现了汉字乱码的问题
重新另存一份,注意文字编码处,改为ANSI即可。
看看效果
提倒是提取出来了,,但是这样也没办法分辨谁是谁啊。看来直接这样提取是不行的。
注意到在这个层层嵌套的文件夹里面,二级目录的名字已经足以供我们分辨内容了,那能不能想个办法直接把二级目录的名称直接提取出来并代替文件这个乱糟糟的名字呢?
修改脚本
cd /d E:\Adobe\162款Photoshop炒鸡实用笔刷包集合
for /d %%a in (*) do (for /r %%b in (\%%a\*.abr) do (copy %%b E:\Adobe\笔刷合集包\%%a.abr))
pause
那既然你文件夹可以套娃,那我也可以采用套娃的办法一步到位啊
注意到初次遍历访问参数是 /d 该参数意为 遍历当前路径的文件夹下的文件夹,但也可在(匹配符)中指定路径
这个初次没有往深层走,每次先访问到其中一个二级目录,并将其名字保存赋给参数 %%a 此时我们出于一个二级目录下,也获得了该目录的名称。
那么在该目录下再进行一次遍历,这次遍历的目的是深层便利此文件下的所有文件,所有后缀为 .abr 的文件,(前面应该注意到了此二级目录下还有一个子目录,再在子目录下才包含我们需要的文件,因此这里采用参数 /r )并将此文件绝对路径赋给参数 %%b ,此时,我们获取了文件的绝对目录(%%a)以及其配套的文件名称(%%a) 只需进行一次拷贝即可。
关于两个参数 %%a 以及 %%b 为什么前者是一个字符,后者是绝对路径
我的理解是,当遍历访问的目标为目录时,返还给参数的就是此目录的名称,当遍历访问的目标为文件时,返还给参数的就是此文件的绝对路径,当然这个说法不一定准确。。我也是网上现学的,如果说法有误还请各位大佬解答一下。。
再执行以下看看效果
起飞~~ 看来效果还不错,以后还有这样套娃的文件夹就可以用这种办法啦。
最后
本篇博客水平不高,是本人对批处理文件的一点粗浅学习笔记。如果文章中有错误或有更好改进方法欢迎各位不吝赐教。
如果有小伙伴看重这套资源我也可以分享下哈~
感谢您的阅读。