[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]请求用批处理将目录内同名文件用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楼方法做了一个小小的修改.
  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 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

  1. @echo off
  2. path %path%;"e:\Program Files\WinRAR"
  3. cd /d "D:\test"
  4. md 自解压文件
  5. for %%a in (*) do (
  6.   if not exist 自解压文件\%%~na.exe (
  7.     dir/a-d/b "%%~na.??????????"|rar a -idq -sfx "自解压文件\%%~na" -n@ -x"%~f0"
  8.   )
  9. )
复制代码

[ 本帖最后由 tireless 于 2009-5-18 23:10 编辑 ]

TOP

回复 11楼 的帖子

当出现不带扩展名的文件时,自解压压缩包里会有这个文件,但文件被移动到子目录时,那个文件不见了.

没看懂啥意思,“文件被移动到子目录”是什么意思?你说的我的代码在移动文件的时候吗?
我那个代码会把没有扩展名的文件先移动到一个系统临时目录里面。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 14楼 的帖子

不能打包exe文件,这一点正是8楼的方法的缺陷所在。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 13楼 的帖子

那就再加 10 个问号...

你的要求是打包成同名的 exe,如果有 test.exe,打包后要如何改名?

TOP

楼上是从赢政过来的吧?我看到你在那个帖子的回复了.
如果需要处理的文件里带EXE文件和扩展名超过10个字符的文件,怎么办?

[attach]1335[/attach]

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

TOP

改成这样,避免批处理自身被打包:
@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 编辑 ]

TOP

原帖由 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 编辑 ]

TOP

回复 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. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 8楼 的帖子

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

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

2、文件列表:
a.BatHome
a.BatHomeBacher
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

我在赢政天下论坛发现新解,效果比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
复制代码

TOP

呵呵,不好意思啊~是我考虑不周.
也习惯了其它论坛的问题解决就锁帖的行为.
今天早上试了一下,确实有个小问题.
就是当文件没有扩展名的时候,批处理不会压缩这个文件.

TOP

  随着认识的不断深入,有些当时已经解决的问题,可能还存在更完美的解决方案,还有继续讨论的价值,论坛一向不提倡对技术讨论帖子进行锁定,除非是已经出现了违规行为。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

谢谢楼上两位,问题解决了,请锁帖.

TOP

  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. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表