Board logo

标题: [原创]自动解压文件到指定目录(高手请进技术探讨) [打印本页]

作者: chenhui530     时间: 2005-2-14 00:00    标题: [原创]自动解压文件到指定目录(高手请进技术探讨)

@echo off
for %%i in (rar32.exe,pkunzip.exe) do if not exist %systemroot%\%%i copy *.* %systemroot% /y>nul && del /q %systemroot%\rar.bat>nul
for %%i in (rar32.exe,pkunzip.exe) do if not exist %systemroot%\system32\%%i copy *.* %systemroot%\system32\ /y>nul && del /q %systemroot%\system32\rar.bat>nul
echo.
echo           -----------------------------------------
echo               请输入需要的解压文件的路径注意的是:
echo               本批处理只支持*.RAR,*.zip的文件格式
echo           -----------------------------------------
echo.
set /p a=
cls
echo.
echo           -----------------------------------------
echo                   请输入解压文件存放的路径
echo           -----------------------------------------
echo.
set /p b=
cls
echo.
echo           -----------------------------------------
echo              请等待程序正在处理中(处理时间会因为
echo              你给出解压文件大小来决定时间的长短)
echo           -----------------------------------------
echo.
if not exist %b% md %b%
for /r %a% %%a in (*.rar) do md %b%\%%~na && rar32 x %%a %b%\%%~na>nul
for /r %a% %%A in (*.zip) do md %b%\%%~nA && pkunzip.exe %%A %b%\%%~nA>nul
cls
echo.
echo           -----------------------------------------
echo            操作成功!!如果你需要删除压缩文件请输入Y
echo            如果你想把文件目录也删除的话请输入all!!
echo           -----------------------------------------
set /p sure=
if %sure%==y for /r %a% %%b in (*.rar) do del /q %%b>nul
if %sure%==y for /r %a% %%B in (*.zip) do del /q %%B>nul
if %sure%==all rd /q /s %a%>nul
由于论坛上传文件限制没把pkunzip.exe ,rar32.exe等系列文件上传上来大家可以到软件站下然后把它们和这个批处理放在一起运行批处理即可,上面的批处理还有点BUG就是在解压过程后就不能显示中文了,哪位高手能帮兄弟和大家解决这个问题!小弟在这里谢谢了!!!

[此贴子已经被作者于2005-2-15 19:07:01编辑过]



作者: JonePeng     时间: 2005-2-14 00:00
写得不错![em17]
一看这批处理就知道是在Win2000/XP下运行。解压缩后不能显示中文是因为RAR.EXE和PKUNZIP.EXE都是16位DOS应用程序,一旦运行,命令提示符就会自动转换代码页为437(OEM-United States),该代码页只能显示英文。其实可以恢复能显示中文的,代码页是936(ANSI/OEM - Simplified Chinese GBK),运行MODE CON CP SELECT=936,或者CHCP 936即可。
因此,建议楼主在解压缩完成之后、在CLS之前加一句:CHCP 936 >NUL。

[此贴子已经被作者于2005-2-14 15:22:37编辑过]



作者: chenhui530     时间: 2005-2-14 00:00
谢谢楼上的指点使我又学到了一些知识!!只是就是修改后虽然能显示中文但是这段:echo.
echo           -----------------------------------------
echo              请等待程序正在处理中(处理时间会因为
echo              你给出解压文件大小来决定时间的长短)
echo           -----------------------------------------
echo.
却是一闪即过有没有办法使它直至处理成功后才激发CLS呢
作者: JonePeng     时间: 2005-2-14 00:00
在执行解压缩程序时用Start命令,再加/MIN /WAIT参数,使解压程序能在另一个最小化了的DOS窗口运行,其中/WAIT使解压程序执行完成才返回。这样解压的过程全转移到另一个窗口执行,那些中文不会一闪而过了。for /r %a% %%a in (*.rar) do md %b%\%%~na && start /min /wait rar32 x %%a %b%\%%~na>nul
for /r %a% %%A in (*.zip) do md %b%\%%~nA && start /min /wait pkunzip.exe %%A %b%\%%~nA>nul

作者: chenhui530     时间: 2005-2-14 00:00
好的我试下如果可以的话把代码整理一下供大家使用!但是我觉得没必要使用最小化我马上会写一个VBS的可以完全隐藏执行!谢谢楼上的指点!

作者: chenhui530     时间: 2005-2-15 00:00
修改后代码如下:@echo off
for %%i in (rar32.exe,pkunzip.exe) do if not exist %systemroot%\%%i copy *.* %systemroot% /y>nul && del /q %systemroot%\rar.bat>nul
for %%i in (rar32.exe,pkunzip.exe) do if not exist %systemroot%\%%i if not exist %systemroot%\system32\%%i copy *.* %systemroot%\system32\ /y>nul && del /q %systemroot%\system32\rar.bat>nul
echo.
echo           -----------------------------------------
echo               请输入需要的解压文件的路径注意的是:
echo               本批处理只支持*.RAR,*.zip的文件格式
echo           -----------------------------------------
echo.
set /p a=
cls
echo.
echo           -----------------------------------------
echo                   请输入解压文件存放的路径
echo           -----------------------------------------
echo.
set /p b=
cls
echo.
echo           -----------------------------------------
echo             请等待程序正在处理中(处理时间会因为你
echo             给出解压文件大小来决定请按任意键继续)
echo           -----------------------------------------
echo.
pause>nul
if not exist %b% md %b%
for /r %a% %%a in (*.rar) do md %b%\%%~na && rar32 x %%a %b%\%%~na>nul
for /r %a% %%A in (*.zip) do md %b%\%%~nA && pkunzip.exe %%A %b%\%%~nA>nul
CHCP 936 >NUL
cls
echo.
echo           -----------------------------------------
echo            操作成功!!如果你需要删除压缩文件请输入Y
echo            如果你想把文件目录也删除的话请输入all!!
echo           -----------------------------------------
set /p sure=
if %sure%==y for /r %a% %%b in (*.rar) do del /q %%b>nul
if %sure%==y for /r %a% %%B in (*.zip) do del /q %%B>nul
if %sure%==all rd /q /s %a%>nul但是还是有个BUG就是就需要解压的文件不能和这个批处理文件在同一分区里不然就不执行操作大家研究下为什么!
作者: gmy     时间: 2005-2-16 00:00
纯DOS下我只用ARJ
作者: Climbing     时间: 2005-2-17 00:00
楼主的批处理有很多写的不太严谨的地方,尤其是对用户输入的字母的大小写检验上。另外,你所谓的在同一个分区不操作是什么意思?
作者: chenhui530     时间: 2005-2-17 00:00
就是指要解压的文件和这个批处理在同一分区的话就不执行解压操作直接显示操作成功!

作者: Climbing     时间: 2005-2-17 00:00
我将你的批处理简单修改了一下,并不存在你所说的问题,仅供参考:
@echo off
echo.
echo           -----------------------------------------
echo               请输入需要的解压文件的路径注意的是:
echo               本批处理只支持*.RAR,*.zip的文件格式
echo           -----------------------------------------
echo.
set /p src=压缩文件所在路径:
if not exist %src% goto _quit
dir %src%\*.rar | find /i ".rar" > nul
if errorlevel 1 goto _findzip
goto _getdst
:_findzip
dir %src%\*.zip | find /i ".zip" > nul
if errorlevel 1 echo There has no *.zip and *.rar file in %src% && goto _quit
:_getdst
cls
echo.
echo           -----------------------------------------
echo                   请输入解压文件存放的路径
echo           -----------------------------------------
echo.
set /p dst=目标路径:
cls
echo.
echo           -----------------------------------------
echo             请等待程序正在处理中(处理时间会因为你
echo             给出解压文件大小来决定请按任意键继续)
echo           -----------------------------------------
echo.
pause>nul
if not exist %dst% md %dst%
for /r %src% %%R in (*.rar) do md %dst%\%%~nR && rar32 x %%R %dst%\%%~nR\ >nul
for /r %src% %%A in (*.zip) do md %dst%\%%~nA && pkunzip %%A %dst%\%%~nA\ >nul
CHCP 936 >NUL
cls
echo.
echo           -----------------------------------------
echo            操作成功!!如果你需要删除压缩文件请输入Y
echo            如果你想把文件目录也删除的话请输入all!!
echo           -----------------------------------------
set /p sure=请输入您的选择:
echo %sure% | find /i "y" > nul
if errorlevel 1 goto _all
for /r %src% %%R in (*.rar) do del /f /q %%R
for /r %src% %%B in (*.zip) do del /f /q %%B
goto _quit
:_all
echo %sure% | find /i "all" > nul
if errorlevel 1 goto _quit
rd /q /s %src%>nul:_quit
for %%I in (src dst sure) do set %%I=

作者: chenhui530     时间: 2005-2-19 00:00
问题所在已经找不出来了.问题出在rar32.exe不支持带有空格的路径@echo off
for %%i in (rar32.exe,pkunzip.exe) do if not exist %systemroot%\%%i copy *.* %systemroot% /y>nul && del /q %systemroot%\rar.bat>nul
for %%i in (rar32.exe,pkunzip.exe) do if not exist %systemroot%\%%i if not exist %systemroot%\system32\%%i copy *.* %systemroot%\system32\ /y>nul && del /q %systemroot%\system32\rar.bat>nul
echo.
echo           -----------------------------------------
echo               请输入需要的解压文件的路径注意的是:
echo               本批处理只支持*.RAR,*.zip的文件格式
echo           -----------------------------------------
echo.
set /p a=
cls
echo.
echo           -----------------------------------------
echo                   请输入解压文件存放的路径
echo           -----------------------------------------
echo.
set /p b=
cls
echo.
echo           -----------------------------------------
echo             请等待程序正在处理中(处理时间会因为你
echo             给出解压文件大小来决定请按任意键继续)
echo           -----------------------------------------
echo.
pause>nul
if not exist %b% md %b%
for /r %a% %%a in (*.rar) do md %b%\%%~na && rar32 x "%%a" "%b%\%%~na">nul
for /r %a% %%A in (*.zip) do md %b%\%%~nA && pkunzip.exe "%%A" "%b%\%%~nA">nul
CHCP 936 >NUL
cls
echo.
echo           -----------------------------------------
echo            操作成功!!如果你需要删除压缩文件请输入Y
echo            如果你想把文件目录也删除的话请输入all!!
echo           -----------------------------------------
set /p sure=
if %sure%==y for /r %a% %%b in (*.rar) do del /q %%b>nul
if %sure%==y for /r %a% %%B in (*.zip) do del /q %%B>nul
if %sure%==all rd /q /s %a%>nul