标题: [文件操作] [已解决]批处理如何将文件夹下主名相同的文件压缩为zip文件? [打印本页]
作者: marginal 时间: 2010-4-23 11:36 标题: [已解决]批处理如何将文件夹下主名相同的文件压缩为zip文件?
在一个文件夹下,有很多以一个10个字符为主文件名的文件,比如5535687894 hw,5535687894 pl,5535687894 EOD;5535687916 pl;5535687916 in等等诸如此类的文件。
如果主文件名相同,就认为是同一套文件,比如5535687894 hw,5535687894 pl,5535687894 EOD三个文件就是5535687894的一套完整文件,需要将这三个文件压缩为5535687894.ZIP的文件,然后再删除压缩前的文件(即在文件夹下删除5535687894 hw,5535687894 pl,5535687894 EOD。对于没有被压缩的文件,不执行删除)
但是如果一套缺少以hw结尾的文件,则认为文件不完整,不能打包。比如,如果文件下只有5535687916 pl;5535687916 in文件,没有55355687916 hw文件,就不用打包,直接跳过。也不执行删除。
问题已解决:- @echo off&setlocal enabledelayedexpansion
- set "winrar=C:\Program Files\WinRAR\WinRAR.exe"
- for %%a in ("* hw.TIF") do (set a=%%a&set "a=!a:~0,10!"
- "%winrar%" m -afzip -inul -ibck "!a!" "!a! pl.PDF" "!a! eod.PDF" "%%a")
复制代码
作者: x9tiancmd 时间: 2010-4-23 12:54
- @echo off
- ::确保系统盘安装有WINRAR压缩软件
- for /f "delims=" %%i in ('dir /a-d/b/s %systemdrive%rar.exe') do path=%%~dpi;%path%
- dir /a/b .|find "5535687894 hw" >nul||echo.不存在5535687894 hw文件,任意键退出...&&pause>nul&&exit
-
- rar a 5535687894.zip 5535687894* /m5
复制代码
另问下楼主: 5535687894 hw,5535687894 pl,5535687894 EOD 这三个文件是删除原始的文件,还是删除压缩了ZIP里面的, 这话说得不明不白不好猜呀
由于刚才还是叫“5535687894” 后面又变在了 " 5535687916"
我是看了三遍,就是没看懂你到底是压缩前者还是后者, 所以你自己改下吧,我晕了○( ̄﹏ ̄)○
虽然你写了是删除原始文件, 被你这么一转, 我都不敢猜压缩后的叫原始文件,还是原始文件叫原始文件
[ 本帖最后由 x9tiancmd 于 2010-4-23 13:22 编辑 ]
作者: marginal 时间: 2010-4-23 13:22
楼上的,多谢你的代码。
问题是,好像这个代码只能生成5535687894的打包文件,其它的号码都不能自动打包呀
作者: marginal 时间: 2010-4-23 15:14
原帖由 x9tiancmd 于 2010-4-23 12:54 发表
@echo off
::确保系统盘安装有WINRAR压缩软件
for /f "delims=" %%i in ('dir /a-d/b/s %systemdrive%rar.exe') do path=%%~dpi;%path%
dir /a/b .|find "5535687894 hw" >nul||echo.不存在5535687894 hw文件,任 ...
楼主,其实整个的意思就是:先判断文件下一套文件是否完整,完整的标准时有无形如5535678910 hw文件的存在,也就是只要有形如XXXXXXXXXX hw文件存在,就认为是完整的一套文件。
如果一套文件完整,就执行压缩;压缩后删除被压缩的文件(即删除hw,in,pl文件);如果文件不完整,不执行合并,也不执行删除。
上文提到的5535678910等,只是举例。
作者: hanyeguxing 时间: 2010-4-23 15:49
1,zip格式只能由winrar创建,控制台 RAR 不能创建 ZIP 压缩文件。
2,以所有文件均在批处理所在目录为准。压缩前推荐备份目录内所有文件。
3,示例1:检查文件名字符是否为10个,并检查三个文件是否都存在:- @echo off&setlocal enabledelayedexpansion
- set "winrar=C:\Program Files\WinRAR\WinRAR.exe"
- for /f "delims=" %%a in ('dir /a-d/b *.hw') do (
- call:hanye "%%a"
- if !n!==10 if exist "%%~na.pl" if exist "%%~na.eod" "%winrar%" m -afzip "%%~na" "%%~na.pl" "%%~na.eod" "%%a"
- )
- exit
- :hanye
- set "a=%~1"&set n=0
- :guxing
- if not "!a:~%n%,1!"=="" set/a n+=1&goto:guxing
复制代码
4,示例2:不检查文件名字符数,但检查三个文件是否同时存在- @echo off
- set "winrar=C:\Program Files\WinRAR\WinRAR.exe"
- for /f "delims=" %%a in ('dir /a-d/b *.hw') do if exist "%%~na.pl" if exist "%%~na.eod" "%winrar%" m -afzip "%%~na" "%%~na.pl" "%%~na.eod" "%%a"
复制代码
5,示例3:不检查文件名字符数,也不检查是否同时存在,只以.hw为基准- @echo off
- set "winrar=C:\Program Files\WinRAR\WinRAR.exe"
- for /f "delims=" %%a in ('dir /a-d/b *.hw') do "%winrar%" m -afzip "%%~na" "%%~na.pl" "%%~na.eod" "%%a"
复制代码
6,如果需要后台运行winrar,使用-IBCK开关。
[ 本帖最后由 hanyeguxing 于 2010-4-23 15:55 编辑 ]
作者: x9tiancmd 时间: 2010-4-23 16:43
才敲了下rar.exe 的帮助文档
rar.exe 看来压缩的不ZIP 格式而是相当于压缩成rar再重命名为ZIP了, 。
作者: marginal 时间: 2010-5-11 14:40
原帖由 hanyeguxing 于 2010-4-23 15:49 发表
5,示例3:不检查文件名字符数,也不检查是否同时存在,只以.hw为基准
@echo off
set "winrar=C:\Program Files\WinRAR\WinRAR.exe"
for /f "delims=" %%a in ('dir /a-d/b * hw') do "%winrar%" m -afzip "%%~na" "%%~na pl" "%%~na eod" "%%a"
多谢你的代码,前段时间一直没有时间测试。我想以你提到的第三种代码来解决我的问题。稍微修改了一下,就是@echo off
set "winrar=C:\Program Files\WinRAR\WinRAR.exe"
for /f "delims=" %%a in ('dir /a-d/b * hw') do "%winrar%" m -afzip "%%~na" "%%~na pl" "%%~na eod" "%%a"
1.打包时总是弹出提示,要手工干预才能完成打包
2.现在的代码实践上将每一个文件都打包成了RAR文件了,并没有将相同HAWB合并到一个文件中,同时,BAT文件也被打包成了RAR文件。
请大侠继续帮忙:
1.请让WINRAR不需要人为干预,让它在后台运行。
2.BAT文件不要被打包
3.同一套文件打包到一个rar文件下,如果没有HW文件,该号码的所有相关文件都不打包。
作者: hanyeguxing 时间: 2010-5-11 16:05
- @echo off
- set "winrar=C:\Program Files\WinRAR\WinRAR.exe"
- for /f "delims=" %%a in ('dir /a-d/b *.hw') do "%winrar%" m -afzip -inul -ibck "%%~na" "%%~na.pl" "%%~na.eod" "%%a"
复制代码
作者: marginal 时间: 2010-5-11 16:31
原帖由 hanyeguxing 于 2010-5-11 16:05 发表
@echo off
set "winrar=C:\Program Files\WinRAR\WinRAR.exe"
for /f "delims=" %%a in ('dir /a-d/b *.hw') do "%winrar%" m -afzip -inul -ibck "%%~na" "%%~na.pl" "%%~na.eod" "%%a"
非常感谢你的耐心,现在winrar不需要人为干预,但是打包的时候文件还是不能合并。
新的代码我修改为- @echo off
- set "winrar=C:\Program Files\WinRAR\WinRAR.exe"
- for /f "delims=" %%a in ('dir /a-d/b * hw') do "%winrar%" m -afzip -inul -ibck "%%~na" "%%~na pl" "%%~na eod" "%%a"
复制代码
同一套文件,还是没有合并,好奇怪。比如5535692536 hw.zip和5535692536.zip两个文件,其实应该为5535692536.zip一个文件中包含所有以5535692536开头的文件,而不是现在的每一个文件都自动打包。
另外,并没有实现判断,即当有形如xxxxxxxxxx hw文件才执行打包,现在的代码没有实现判断。
寒侠,如果可能,我想把文件打包发到你邮箱,你帮忙测试一下,有时候截图也说不明不了问题。
作者: hanyeguxing 时间: 2010-5-11 16:53
为什么要把扩展名里的点都去掉呢?
作者: marginal 时间: 2010-5-11 22:55
原帖由 hanyeguxing 于 2010-5-11 16:53 发表
为什么要把扩展名里的点都去掉呢?
事实上这些文件的拓展名为TIF,PDF之类的。HW,PL,或者IN只是表明这些代表什么文件,并不是扩展名来的。
作者: hanyeguxing 时间: 2010-5-11 23:36
把扩展名打上,或者通配扩展名
作者: marginal 时间: 2010-5-12 10:00
原帖由 hanyeguxing 于 2010-5-11 23:36 发表
把扩展名打上,或者通配扩展名
已经改为了- @echo off
- set "winrar=C:\Program Files\WinRAR\WinRAR.exe"
- for /f "delims=" %%a in ('dir /a-d/b * hw.TIF') do "%winrar%" m -afzip -inul -ibck "%%~na" "%%~na pl.PDF" "%%~na eod.PDF" "%%a"
复制代码
作者: hanyeguxing 时间: 2010-5-12 10:52
* hw.TIF必须用引号括起来- @echo off&setlocal enabledelayedexpansion
- set "winrar=C:\Program Files\WinRAR\WinRAR.exe"
- for %%a in ("* hw.TIF") do (set a=%%a&set "a=!a:~0,10!"
- "%winrar%" m -afzip -inul -ibck "!a!" "!a! pl.PDF" "!a! eod.PDF" "%%a")
复制代码
作者: marginal 时间: 2010-5-12 12:22
原帖由 hanyeguxing 于 2010-5-12 10:52 发表
* hw.TIF必须用引号括起来@echo off&setlocal enabledelayedexpansion
set "winrar=C:\Program Files\WinRAR\WinRAR.exe"
for %%a in ("* hw.TIF") do (set a=%%a&set "a=!a:~0,10!"
"%winrar%" m -afzip -inul - ...
多谢寒大侠,问题解决。
非常感谢!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |