本帖最后由 碇シンジ 于 2011-10-29 11:54 编辑
回复 2# hfg1977
抱歉.以自己的能力修改了一下.能正常调用WINRAR进行压缩.单个文件夹或者多个文件夹都没问题.可是执行完的结果有点不一样.本来应该是多个文件夹拖拽进去.每一个文件夹生成一个压缩包.实际上形成的结果是全都压在一个包内了.
以下是修改后的代码-
- @goto start
- :help
- @echo.===== Ver: 1.0 =========================== 发布日期: 2011-05-06 =======
- @echo. BAT_NAME: rar最高压缩.bat
- @echo. 返回值:
- @echo. 作用 : rar最高压缩
- @echo. 调用: rar最高压缩.bat [Path...] [file...]
- @echo. [Path]: 文件夹路径
- @echo. [file]: 文件
- @echo. 注: 对于单个文件/夹可以用右键,多个文件/夹请采用拖动方法.
- @echo.====================== Copyright@ by hf-g ========= [彭城] ============
- ping /n 4 127.0>nul
- goto:end
- :start ============================================================
- @echo off
- path=%path%;%~dp0.\..\;%~dp0
- ::========================================================
- if /i "%~1"=="" goto help
- if /i "%~1"=="-?" goto help
- set "ext="&set "pathname="&set "Dir_name="&set "p_str="
- set /a exit_BL=0,D_count=0,f_count=0
-
- call:get_P %*
- if "%exit_BL%"=="1" goto end
- ::========================MAIN============================
- ::建立要压缩文件列表
- cd.>"%~dp0.\filelist.txt"
- (
- if not "%pathname_1%"=="" (for /f "tokens=2 delims==" %%a in ('set pathname_') do echo %%a)
- if not "%file_1%"=="" (for /f "tokens=2 delims==" %%a in ('set file_') do echo %%a)
- )>>"%~dp0.\filelist.txt"
-
- ::确定压缩文件名,调用压缩函数
- if not "%pathname_1%"=="" (
- call:compress "%pathname_1%"
- ) else (
- if not "%file_1%"=="" (
- call:compress "%file_1%"
- ))
-
- :end ==============================================================
- if exist "%~dp0.\filelist.txt" del/f/q "%~dp0.\filelist.txt"
- exit /b
- ::===========================调用并进行压缩==================================
- :compress <archive_name>
- echo rar最高压缩...
- "D:\Program Files\WinRAR\winrar.exe" u -m5 -inul -ep1 -ed "%~dp1.\%~n1.rar" @"%~dp0.\filelist.txt"
- :end
- pause
- goto:eof
- ::========================参数设置与获得============================
- :get_p
- ::判断%1是文件夹或文件
- if "%~1"=="" goto:eof
- set "p_str=%~1"
- if exist "%p_str%" (
- if exist "%p_str%.\" (
- set /a D_count+=1&call set "pathname_%%D_count%%=%p_str%"&call set "Dirname_%%D_count%%=%~nx1"&shift /1&goto get_p
- )
- set /a f_count+=1&call set "file_%%f_count%%=%p_str%"&shift /1&goto get_p
- ) else (
- echo "%p_str%" 不是一个正确的文件夹路径或文件^!&set /a exit_BL=1&shift /1&goto end
- )
- @echo off
- :get_p_end
- goto:eof
复制代码 以下是自己参照上面那句调用WINRAR的语句折腾出来的.可惜还是做不到那种效果,第一个只能单文件夹拖拽打包.第二个的效果就跟上面的代码一样.会把拖拽进去的所有文件夹打包在一起.- for /d %%i in (%*) do (
- "D:\Program Files\WinRAR\winrar.exe" u -m5 -ep1 -ed "%*.rar" "%*"
- )
- pause
- exit
复制代码
- for %%f in (%*) do (
- "D:\Program Files\WinRAR\winrar.exe" u -m5 -inul -ep1 -ed "%~dp1%~n1.rar" %*
- )
- pause
- exit
复制代码 继续求帮忙....
同时有一个想法是根据2L的hfg1977给出的代码.会调用到一个FILELIST.TXT文件.能不能把"调用并进行压缩"里面的代码给修改成按FILELIST.TXT每一行内容压缩一次呢?但是自己不会弄. |