找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 41031|回复: 16

[文件操作] [已解决]请求用批处理将目录内同名文件用RAR打包为自解压文件

[复制链接]
发表于 2009-5-14 20:35:59 | 显示全部楼层 |阅读模式
要求,如下:
把目录中的所有同名文件(即同文件名,后缀名不同),打包成同名的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楼方法做了一个小小的修改.
  1. @echo off
  2. set SrcFolder=D:\test
  3. set rarPath=C:\Program Files\WinRAR
  4. for %%a in ("%SrcFolder%\*.*") do (
  5.   md "%SrcFolder%\%%~na" 2>nul
  6.   move /y "%%a" "%SrcFolder%\%%~na" 2>nul
  7. )
  8. for /f "delims=" %%a in ('dir /ad /b "%SrcFolder%"') do (
  9.   "%rarPath%\rar.exe" a -sfx -ep "%SrcFolder%\%%~na.exe" "%SrcFolder%\%%a"

  10. )
复制代码
RAR.EXE加了一个"-EP"参数,不记录路径信息,这样打包后的EXE文件没有路径信息.
另外,本批处理程序不能跟需要处理的文件放在同一目录.

新解决方案见8楼.
不需要把文件移动到相应子目录就可以直接压缩.

[ 本帖最后由 semiuel 于 2009-5-16 00:16 编辑 ]

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢主动给标题标注[已解决]字样

查看全部评分

发表于 2009-5-14 20:57:52 | 显示全部楼层
  这个问题的难点在于如何获取同名文件,所以,需要楼主确认一下以下信息:
  1、这些文件名是不是固定的?如果是固定的话就很好办;
  2、这些文件的后缀名是不是固定的?如果是固定的也好办;
  
  如果文件名和后缀名都不固定,或者都是未知的,那么,处理起来将会有一点难度。
 楼主| 发表于 2009-5-14 21:08:45 | 显示全部楼层
我是帮别人问的,我去了解下情况.
回来再麻烦大家.
发表于 2009-5-14 21:33:36 | 显示全部楼层
  1. @echo off
  2. set SrcFolder=D:\test
  3. set rarPath=C:\Program Files\WinRAR
  4. for %%a in ("%SrcFolder%\*.*") do (
  5.   md "%SrcFolder%\%%~na" 2>nul
  6.   move /y "%%a" "%SrcFolder%\%%~na" 2>nul
  7. )
  8. for /f "delims=" %%a in ('dir /ad /b "%SrcFolder%"') do (
  9.   "%rarPath%\rar.exe" a -sfx "%%~na.exe" "%SrcFolder%\%%a"
  10. )
复制代码
 楼主| 发表于 2009-5-14 22:47:38 | 显示全部楼层
谢谢楼上两位,问题解决了,请锁帖.
发表于 2009-5-14 23:34:34 | 显示全部楼层
  随着认识的不断深入,有些当时已经解决的问题,可能还存在更完美的解决方案,还有继续讨论的价值,论坛一向不提倡对技术讨论帖子进行锁定,除非是已经出现了违规行为。
 楼主| 发表于 2009-5-15 09:06:03 | 显示全部楼层
呵呵,不好意思啊~是我考虑不周.
也习惯了其它论坛的问题解决就锁帖的行为.
今天早上试了一下,确实有个小问题.
就是当文件没有扩展名的时候,批处理不会压缩这个文件.
 楼主| 发表于 2009-5-16 00:11:50 | 显示全部楼层
我在赢政天下论坛发现新解,效果比4楼的好.
  1. @echo off
  2. path %path%;"C:\Program Files\WinRAR"
  3. cd /d "D:\test" ||pause&&exit/b

  4. echo 打包中,请稍等...
  5. for /f "delims=" %%a in ('dir/b/a-d') do (
  6.   if not exist "%%~na.exe" (
  7.     dir /b "%%~na.??????????"|rar a -idq -sfx "%%~na" -n@
  8.   )
  9. )
  10. echo 完成。请按任意键退出...
  11. pause>nul
复制代码
发表于 2009-5-16 08:19:12 | 显示全部楼层

回复 8楼 的帖子

请用此代码分别测试如下场景,看看是不是你想要的结果。

1、文件列表:
a.txt
a.exe

2、文件列表:
a.BatHome
a.BatHomeBacher
发表于 2009-5-16 09:11:14 | 显示全部楼层

回复 7楼 的帖子

1、本批处理程序可以跟需要处理的文件放在同一目录
2、可以兼容没有扩展名的文件
  1. @echo off
  2. set SrcFolder=D:\test
  3. set rarPath=C:\Program Files\WinRAR
  4. rd /s /q "%temp%\BatHome"
  5. md "%temp%\BatHome"
  6. for %%a in ("%SrcFolder%\*.*") do (
  7.   if "%%~xa" equ "" (
  8.     move "%%a" "%temp%\BatHome"
  9.   )
  10. )
  11. for %%a in ("%SrcFolder%\*.*") do (
  12.   if "%%~nxa" neq "%~nx0" (
  13.     md "%SrcFolder%\%%~na"
  14.     move /y "%%a" "%SrcFolder%\%%~na"
  15.   )
  16. )
  17. for /f "delims=" %%a in ('dir /ad /b "%SrcFolder%"') do (
  18.   "%rarPath%\rar.exe" a -sfx -ep "%SrcFolder%\%%~na.exe" "%SrcFolder%\%%a"
  19. )
  20. for %%a in ("%temp%\BatHome\*.*") do (
  21.   "%rarPath%\rar.exe" a -ep "%SrcFolder%\%%~na.exe" "%%a"
  22. )
复制代码
 楼主| 发表于 2009-5-16 10:02:57 | 显示全部楼层
原帖由 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 编辑 ]
发表于 2009-5-16 10:08:37 | 显示全部楼层
改成这样,避免批处理自身被打包:
@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 编辑 ]
 楼主| 发表于 2009-5-16 10:18:13 | 显示全部楼层
楼上是从赢政过来的吧?我看到你在那个帖子的回复了.
如果需要处理的文件里带EXE文件和扩展名超过10个字符的文件,怎么办?



[ 本帖最后由 semiuel 于 2009-5-16 10:22 编辑 ]
发表于 2009-5-16 10:29:54 | 显示全部楼层

回复 13楼 的帖子

那就再加 10 个问号...

你的要求是打包成同名的 exe,如果有 test.exe,打包后要如何改名?
发表于 2009-5-16 12:21:59 | 显示全部楼层

回复 14楼 的帖子

不能打包exe文件,这一点正是8楼的方法的缺陷所在。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 23:21 , Processed in 0.030099 second(s), 12 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表