标题: [文件操作] [已解决]请求用批处理将目录内同名文件用RAR打包为自解压文件 [打印本页]
作者: semiuel 时间: 2009-5-14 20:35 标题: [已解决]请求用批处理将目录内同名文件用RAR打包为自解压文件
要求,如下:
把目录中的所有同名文件(即同文件名,后缀名不同),打包成同名的WINRAR自解压文件。
如:目录内有文件 1.txt、1.pdf、1.doc、1.xls、2.pdf、2.txt、2.log,那么要求打包成1.exe,2.exe。
1.exe和2.exe都是WINRAR自解压文件。
WINRAR安装在默认目录.
请高手帮忙.
参照4楼方法做了一个小小的修改.- @echo off
- set SrcFolder=D:\test
- set rarPath=C:\Program Files\WinRAR
- for %%a in ("%SrcFolder%\*.*") do (
- md "%SrcFolder%\%%~na" 2>nul
- move /y "%%a" "%SrcFolder%\%%~na" 2>nul
- )
- for /f "delims=" %%a in ('dir /ad /b "%SrcFolder%\"') do (
- "%rarPath%\rar.exe" a -sfx -ep "%SrcFolder%\%%~na.exe" "%SrcFolder%\%%a"
-
- )
复制代码
RAR.EXE加了一个"-EP"参数,不记录路径信息,这样打包后的EXE文件没有路径信息.
另外,本批处理程序不能跟需要处理的文件放在同一目录.
新解决方案见8楼.
不需要把文件移动到相应子目录就可以直接压缩.
[ 本帖最后由 semiuel 于 2009-5-16 00:16 编辑 ]
作者: namejm 时间: 2009-5-14 20:57
这个问题的难点在于如何获取同名文件,所以,需要楼主确认一下以下信息:
1、这些文件名是不是固定的?如果是固定的话就很好办;
2、这些文件的后缀名是不是固定的?如果是固定的也好办;
如果文件名和后缀名都不固定,或者都是未知的,那么,处理起来将会有一点难度。
作者: semiuel 时间: 2009-5-14 21:08
我是帮别人问的,我去了解下情况.
回来再麻烦大家.
作者: Batcher 时间: 2009-5-14 21:33
- @echo off
- set SrcFolder=D:\test
- set rarPath=C:\Program Files\WinRAR
- for %%a in ("%SrcFolder%\*.*") do (
- md "%SrcFolder%\%%~na" 2>nul
- move /y "%%a" "%SrcFolder%\%%~na" 2>nul
- )
- for /f "delims=" %%a in ('dir /ad /b "%SrcFolder%\"') do (
- "%rarPath%\rar.exe" a -sfx "%%~na.exe" "%SrcFolder%\%%a"
- )
复制代码
作者: semiuel 时间: 2009-5-14 22:47
谢谢楼上两位,问题解决了,请锁帖.
作者: namejm 时间: 2009-5-14 23:34
随着认识的不断深入,有些当时已经解决的问题,可能还存在更完美的解决方案,还有继续讨论的价值,论坛一向不提倡对技术讨论帖子进行锁定,除非是已经出现了违规行为。
作者: semiuel 时间: 2009-5-15 09:06
呵呵,不好意思啊~是我考虑不周.
也习惯了其它论坛的问题解决就锁帖的行为.
今天早上试了一下,确实有个小问题.
就是当文件没有扩展名的时候,批处理不会压缩这个文件.
作者: semiuel 时间: 2009-5-16 00:11
我在赢政天下论坛发现新解,效果比4楼的好.- @echo off
- path %path%;"C:\Program Files\WinRAR"
- cd /d "D:\test" ||pause&&exit/b
-
- echo 打包中,请稍等...
- for /f "delims=" %%a in ('dir/b/a-d') do (
- if not exist "%%~na.exe" (
- dir /b "%%~na.??????????"|rar a -idq -sfx "%%~na" -n@
- )
- )
- echo 完成。请按任意键退出...
- pause>nul
复制代码
作者: Batcher 时间: 2009-5-16 08:19 标题: 回复 8楼 的帖子
请用此代码分别测试如下场景,看看是不是你想要的结果。
1、文件列表:
a.txt
a.exe
2、文件列表:
a.BatHome
a.BatHomeBacher
作者: Batcher 时间: 2009-5-16 09:11 标题: 回复 7楼 的帖子
1、本批处理程序可以跟需要处理的文件放在同一目录
2、可以兼容没有扩展名的文件- @echo off
- set SrcFolder=D:\test
- set rarPath=C:\Program Files\WinRAR
- rd /s /q "%temp%\BatHome"
- md "%temp%\BatHome"
- for %%a in ("%SrcFolder%\*.*") do (
- if "%%~xa" equ "" (
- move "%%a" "%temp%\BatHome"
- )
- )
- for %%a in ("%SrcFolder%\*.*") do (
- if "%%~nxa" neq "%~nx0" (
- md "%SrcFolder%\%%~na"
- move /y "%%a" "%SrcFolder%\%%~na"
- )
- )
- for /f "delims=" %%a in ('dir /ad /b "%SrcFolder%\"') do (
- "%rarPath%\rar.exe" a -sfx -ep "%SrcFolder%\%%~na.exe" "%SrcFolder%\%%a"
- )
- for %%a in ("%temp%\BatHome\*.*") do (
- "%rarPath%\rar.exe" a -ep "%SrcFolder%\%%~na.exe" "%%a"
- )
复制代码
作者: semiuel 时间: 2009-5-16 10:02
原帖由 Batcher 于 2009-5-16 08:19 发表
请用此代码分别测试如下场景,看看是不是你想要的结果。
1、文件列表:
a.txt
a.exe
2、文件列表:
a.BatHome
a.BatHomeBacher
因为在他的使用过程中不会出现EXE文件和扩展名超过10字符
10楼的程序我试了一下,有一个问题.
当出现不带扩展名的文件时,自解压压缩包里会有这个文件,但文件被移动到子目录时,那个文件不见了.
[ 本帖最后由 semiuel 于 2009-5-16 10:08 编辑 ]
作者: tireless 时间: 2009-5-16 10:08
改成这样,避免批处理自身被打包:
@echo off
path %path%;"C:\Program Files\WinRAR"
cd /d "D:\test" ||pause&&exit/b
echo 打包中,请稍等...
for /f "delims=" %%a in ('dir/b/a-d') do (
if not exist "%%~na.exe" (
dir /b "%%~na.??????????"|rar a -idq -sfx "%%~na" -n@ -x"%~f0"
)
)
echo 完成。请按任意键退出...
pause>nul
不会漏掉没有扩展名的文件,dir test.???????? 会列出所有文件名为 test 的文件,包括没有扩展名的。
[ 本帖最后由 tireless 于 2009-5-16 10:17 编辑 ]
作者: semiuel 时间: 2009-5-16 10:18
楼上是从赢政过来的吧?我看到你在那个帖子的回复了.
如果需要处理的文件里带EXE文件和扩展名超过10个字符的文件,怎么办?
[attach]1335[/attach]
[ 本帖最后由 semiuel 于 2009-5-16 10:22 编辑 ]
作者: tireless 时间: 2009-5-16 10:29 标题: 回复 13楼 的帖子
那就再加 10 个问号...
你的要求是打包成同名的 exe,如果有 test.exe,打包后要如何改名?
作者: Batcher 时间: 2009-5-16 12:21 标题: 回复 14楼 的帖子
不能打包exe文件,这一点正是8楼的方法的缺陷所在。
作者: Batcher 时间: 2009-5-16 12:24 标题: 回复 11楼 的帖子
当出现不带扩展名的文件时,自解压压缩包里会有这个文件,但文件被移动到子目录时,那个文件不见了.
没看懂啥意思,“文件被移动到子目录”是什么意思?你说的我的代码在移动文件的时候吗?
我那个代码会把没有扩展名的文件先移动到一个系统临时目录里面。
作者: tireless 时间: 2009-5-16 21:32
- @echo off
- path %path%;"e:\Program Files\WinRAR"
- cd /d "D:\test"
-
- md 自解压文件
- for %%a in (*) do (
- if not exist 自解压文件\%%~na.exe (
- dir/a-d/b "%%~na.??????????"|rar a -idq -sfx "自解压文件\%%~na" -n@ -x"%~f0"
- )
- )
复制代码
[ 本帖最后由 tireless 于 2009-5-18 23:10 编辑 ]
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |