Board logo

标题: [文件操作] 史上最难的批处理,文件有条件解压缩并归类 [打印本页]

作者: feiaizhong    时间: 2012-12-6 14:49     标题: 史上最难的批处理,文件有条件解压缩并归类

假设有D:\A和D:\B两个目录,现在需要将A目录下面所有文件名长度大于25个字符的.zip压缩包解压缩,然后分类放在B目录下面。
难度在于:
1、压缩包命名规则基本上前12位和后12位为MAC地址,第12位后的第一个下划线“_”之前会有两个数字用逗号分割。第一个下划线之后一直到结束,去掉MAC地址后有或没有字符存在。如:
CCA462178330,1,17-_-CCA46217833F.zip文件中CCA462178330和CCA46217833E为MAC地址,1和17是两个数字,另外还有字符“_-”后面会用到。当然也有可能有CCA462178340,4,20-_-,.CCA46217834F.zip这样的可能。

2、压缩包中的文件类似于CC_A4_62_1A_00_02_ND_EncCertFile.bin,当然也有可能是CC-A4-62_1A-00_02_ND_EncCertFile.bin等不规则的。前面提到的数字1和17代表压缩包中文件名从第1位到第17位为MAC地址,字符“_-”代表这个1--17位中去掉这些字符就是真正的MAC地址。

3、现在要将压缩包中的文件,取MAC地址前7位,如:CCA4621在B目录下建立CCA4621的文件夹,并将符合前7位为CCA4621的归类到该文件夹中。

4、不符合条件的在B目录下建立C文件夹统一存放。

5、处理完的压缩包删除。前提是确保该压缩包中所有文件都被归类

6\文件名大致如下:
解压缩后用TXT打开即可.
压缩软件可用WINRAR或者WINZIP,7-Z 都可以
作者: cutebe    时间: 2012-12-6 15:48

本帖最后由 cutebe 于 2012-12-6 15:52 编辑

既然这么难,你可以提供一些文件内容为空的压缩包
(即:用CD.>MAC.BIN 等方式生成你电脑上一样的文件名,再压缩起来)
这样综合再打包一次发上论坛也不占多大空间。否则你电脑上文件名大家无从猜起,个不是难上加难。
还有你用什么压缩软件也得说阿,不然软件不一样不是白费费劲。

或者制作一个生成示例压缩包的 P ,不仅对你学习 P 有帮助,还能把它变成史上第二难 ^_^
作者: zz100001    时间: 2012-12-6 17:18

史上最脑残的楼主
作者: CrLf    时间: 2012-12-6 17:24

“史上最难的帖子”,要不要帮你放回收站冷冻到下个世纪求解?
作者: BAT-VBS    时间: 2012-12-7 10:02

1000¥
这代码我可以写
作者: feiaizhong    时间: 2012-12-7 11:18

已添加文件示例,顶起来,求解.
作者: cutebe    时间: 2012-12-7 23:59

  1. ::解压分类
  2. ::BY CUTEBE @ BATHOME
  3. @ECHO OFF
  4. SET "SP=D:\C"  %ZIP文件所在目录%
  5. SET "TP=D:\B"  %解压目录%
  6. SET WINRAR="C:\Program Files\WinRAR\WINRAR.EXE" %解压软件%
  7. IF NOT EXIST "%TP%\" MD "%TP%"
  8. FOR /F "DELIMS=" %%Z IN ('DIR/S/B/A-D "%SP%\*.ZIP"')DO CALL :EXZIP "%%Z"
  9. GOTO :EOF
  10. ::结束
  11. :EXZIP
  12. SET "MZ=%~N1"
  13. IF "%MZ:~24%"=="" GOTO :EOF
  14. %WINRAR% X %1 "%TP%\" %解压代码%
  15. FOR /F "TOKENS=2,3 DELIMS=,-" %%A IN ("%MZ%")DO SET/aM=%%A-1,L=%%B-M
  16. SETLOCAL ENABLEDELAYEDEXPANSION
  17. FOR /F "DELIMS=" %%B IN ('DIR/B "%TP%\*.BIN"')DO (
  18.  SET "FN=%%~NB"
  19.  SET "FN=!FN:~%M%,%L%!"
  20.  CALL :SMAC FN FNM
  21.  CALL :LEN FN FNLen
  22.  CALL :LEN FNM MLen
  23.  CALL :MACI "!FNM!" F
  24.  IF !FNLen!_!MLen!_!F!==!L!_12_1 (
  25.   SET "NTP=%TP%\!FNM:~,7!"
  26.   IF NOT EXIST "!NTP!\" MD "!NTP!"
  27.   MOVE "%TP%\%%B" "!NTP!"
  28.  )ELSE (
  29.   IF NOT EXIST "%TP%\C\" MD "%TP%\C"
  30.   MOVE "%TP%\%%B" "%TP%\C"
  31.  )
  32. )
  33. ENDLOCAL
  34. ::DEL/A/F/Q %1 %请反复测试无误后再使用本条命令%
  35. GOTO :EOF
  36. :SMAC MACSTR VAR
  37. SETLOCAL ENABLEDELAYEDEXPANSION
  38. SET MACS=!%1!
  39. FOR %%M IN (- _ , .)DO SET MACS=!MACS:%%M=!
  40. ENDLOCAL&SET %2=%MACS%
  41. GOTO :EOF
  42. :MACI MACSTR FLAG
  43. SETLOCAL ENABLEDELAYEDEXPANSION
  44. SET "MACSTR=%~1"
  45. FOR %%S IN (0 1 2 3 4 5 6 7 8 9 A B C D E F)DO IF DEFINED MACSTR SET "MACSTR=!MACSTR:%%S=!"
  46. IF "!MACSTR!"=="" SET FLAG=1
  47. ENDLOCAL&SET %2=%FLAG%
  48. GOTO :EOF
  49. :LEN StrVarName LenVar %借用plp626代码%
  50. SETLOCAL ENABLEDELAYEDEXPANSION
  51. SET "$=!%1!#"
  52. SET N=&FOR %%A IN (4096 2048 1024 512 256 128 64 32 16)DO IF "!$:~%%A!@" NEQ "@" SET/aN+=%%A&SET "$=!$:~%%A!"
  53. SET "$=!$!FEDCBA9876543210"&SET/aN+=0x!$:~16,1!
  54. ENDLOCAL&SET/a%2=%N%
复制代码

作者: Heykuz    时间: 2012-12-9 20:17

好复杂。这么多压缩软件的话,电脑运行都慢了。




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