中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]自动解压文件到指定目录(高手请进技术探讨)
作者:
标题: [原创]自动解压文件到指定目录(高手请进技术探讨) 上一主题 | 下一主题
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『楼 主』:  [原创]自动解压文件到指定目录(高手请进技术探讨)

@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编辑过]






http://www.msfans.net/bbs/
2005-2-14 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
JonePeng
金牌会员

D◎$ Fαп


积分 4562
发帖 1883
注册 2004-1-19
来自 广东广州
状态 离线
『第 2 楼』:  

写得不错![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编辑过]






----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
  
2005-2-14 00:00
查看资料  发送邮件  发短消息 网志  OICQ (373343541)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 3 楼』:  

谢谢楼上的指点使我又学到了一些知识!!只是就是修改后虽然能显示中文但是这段:echo.
echo           -----------------------------------------
echo              请等待程序正在处理中(处理时间会因为
echo              你给出解压文件大小来决定时间的长短)
echo           -----------------------------------------
echo.
却是一闪即过有没有办法使它直至处理成功后才激发CLS呢



http://www.msfans.net/bbs/
2005-2-14 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
JonePeng
金牌会员

D◎$ Fαп


积分 4562
发帖 1883
注册 2004-1-19
来自 广东广州
状态 离线
『第 4 楼』:  

在执行解压缩程序时用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




----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
  
2005-2-14 00:00
查看资料  发送邮件  发短消息 网志  OICQ (373343541)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 5 楼』:  

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




http://www.msfans.net/bbs/
2005-2-14 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 6 楼』:  

修改后代码如下:@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就是就需要解压的文件不能和这个批处理文件在同一分区里不然就不执行操作大家研究下为什么!



http://www.msfans.net/bbs/
2005-2-15 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
gmy
版主

操作系统爱好者


积分 1113
发帖 392
注册 2002-11-11
状态 离线
『第 7 楼』:  

纯DOS下我只用ARJ



DOS之家 http://doshome.com 站长 葛明阳
2005-2-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 8 楼』:  

楼主的批处理有很多写的不太严谨的地方,尤其是对用户输入的字母的大小写检验上。另外,你所谓的在同一个分区不操作是什么意思?



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2005-2-17 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 9 楼』:  

就是指要解压的文件和这个批处理在同一分区的话就不执行解压操作直接显示操作成功!




http://www.msfans.net/bbs/
2005-2-17 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 10 楼』:  

我将你的批处理简单修改了一下,并不存在你所说的问题,仅供参考:
@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=




偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2005-2-17 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 11 楼』:  

问题所在已经找不出来了.问题出在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



http://www.msfans.net/bbs/
2005-2-19 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: