资源列表批处理 v4

距离《资源列表批处理》一文已近五年,
除了压缩软件从 WinRAR 转至 7-Zip(v2),代码几乎没有变动。
随着硬盘数与文件夹数的不断增加与调整,
骆驼自然希望能进一步提升批处理文件与“资源”本身的适配,
尽量减少额外的代码调整。
这就需要彻底进行业务解耦,并充分利用自动化来完成工作。

在 v3 里,通过操作批处理文件名,实现了“资源”名称变量化。
这样一个“restree-drama1.bat”就可以处理“drama1”的文件夹。
对于不同硬盘/多个文件夹只需要分别复制并改名即可,
免去了原先需要对批处理代码本身进行多处字段替换。

经过进一步思考后,骆驼认为够通过引入循环机制,
解决 v3 需要改名与复制多个以针对多个子文件夹的麻烦,
同时也能够避免,批处理文件名与资源文件夹命名不一致导致的问题。
因此,在一番研究后,v4 终于诞生啦:

:: resourse tree v4
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
:: 设置保存目录与压缩程序
SET loc=c:\Users\horan\Documents\res\
SET zip=c:\Program Files\7-Zip\7z.exe
:: 循环子目录
FOR /D %%s IN (*) DO (
  :: 获取资源名称
  SET res=%%s
  ECHO 资源列表:!res!
  :: 删除旧资源列表
  DEL res-!res!-*.txt >nul 2>nul
  DEL %loc%res-!res!-*.txt >nul 2>nul
  :: 创建新资源列表
  TREE %~d0\!res! > res-!res!-%DATE:~2,2%%DATE:~5,2%%DATE:~8,2%.txt 2>nul
  COPY res-!res!-*.txt %loc% >nul 2>nul
  :: 加入压缩文档
  "%zip%" a %loc%res-list.7z res-!res!-*.txt >nul 2>nul
)

可以看到,在 v4 中资源列表处理的核心代码没有大的变化,
主要是加入了循环与使用了变量,同时还隐藏了输出/错误结果。
只需要将其复制到各个资源硬盘根目录即可,无需额外修改。
“一招鲜,吃遍天”,这个结果骆驼相当满意!

记得加上 SETLOCAL ENABLEDELAYEDEXPANSION
其它要注意的坑,则是批处理的循环中各种变量的写法:
1)子目录:%%s
2)循环内变量:!res!
3)普通变量:%loc%

【相关资料】
0、tree – Cuba Gallery◃flickr (题图)
1、资源列表批处理 v1◃horan
2、DOS – String Manipulation◃dostips
3、Batch files – FOR loops◃robvanderwoude
4、Iterate all files in a directory◃stackoverflow
5、Echo off but messages are displayed◃stackoverflow

发表评论

邮箱地址不会被公开。 必填项已用*标注