标题: [文件操作] 史上最难的批处理,文件有条件解压缩并归类 [打印本页]
作者: 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
- ::解压分类
- ::BY CUTEBE @ BATHOME
- @ECHO OFF
- SET "SP=D:\C" %ZIP文件所在目录%
- SET "TP=D:\B" %解压目录%
- SET WINRAR="C:\Program Files\WinRAR\WINRAR.EXE" %解压软件%
- IF NOT EXIST "%TP%\" MD "%TP%"
- FOR /F "DELIMS=" %%Z IN ('DIR/S/B/A-D "%SP%\*.ZIP"')DO CALL :EXZIP "%%Z"
- GOTO :EOF
- ::结束
-
- :EXZIP
- SET "MZ=%~N1"
- IF "%MZ:~24%"=="" GOTO :EOF
- %WINRAR% X %1 "%TP%\" %解压代码%
- FOR /F "TOKENS=2,3 DELIMS=,-" %%A IN ("%MZ%")DO SET/aM=%%A-1,L=%%B-M
- SETLOCAL ENABLEDELAYEDEXPANSION
- FOR /F "DELIMS=" %%B IN ('DIR/B "%TP%\*.BIN"')DO (
- SET "FN=%%~NB"
- SET "FN=!FN:~%M%,%L%!"
- CALL :SMAC FN FNM
- CALL :LEN FN FNLen
- CALL :LEN FNM MLen
- CALL :MACI "!FNM!" F
- IF !FNLen!_!MLen!_!F!==!L!_12_1 (
- SET "NTP=%TP%\!FNM:~,7!"
- IF NOT EXIST "!NTP!\" MD "!NTP!"
- MOVE "%TP%\%%B" "!NTP!"
- )ELSE (
- IF NOT EXIST "%TP%\C\" MD "%TP%\C"
- MOVE "%TP%\%%B" "%TP%\C"
- )
- )
- ENDLOCAL
- ::DEL/A/F/Q %1 %请反复测试无误后再使用本条命令%
- GOTO :EOF
-
- :SMAC MACSTR VAR
- SETLOCAL ENABLEDELAYEDEXPANSION
- SET MACS=!%1!
- FOR %%M IN (- _ , .)DO SET MACS=!MACS:%%M=!
- ENDLOCAL&SET %2=%MACS%
- GOTO :EOF
-
- :MACI MACSTR FLAG
- SETLOCAL ENABLEDELAYEDEXPANSION
- SET "MACSTR=%~1"
- 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=!"
- IF "!MACSTR!"=="" SET FLAG=1
- ENDLOCAL&SET %2=%FLAG%
- GOTO :EOF
-
- :LEN StrVarName LenVar %借用plp626代码%
- SETLOCAL ENABLEDELAYEDEXPANSION
- SET "$=!%1!#"
- SET N=&FOR %%A IN (4096 2048 1024 512 256 128 64 32 16)DO IF "!$:~%%A!@" NEQ "@" SET/aN+=%%A&SET "$=!$:~%%A!"
- SET "$=!$!FEDCBA9876543210"&SET/aN+=0x!$:~16,1!
- ENDLOCAL&SET/a%2=%N%
复制代码
作者: Heykuz 时间: 2012-12-9 20:17
好复杂。这么多压缩软件的话,电脑运行都慢了。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |