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

[文件操作] 批量拖动复制改名+压缩+压缩包内改名,求大神指导!(困难)

本帖最后由 黄老师 于 2020-3-9 15:08 编辑

最近遇到一个批量处理文件的任务,小弟的知识已经不能完成此复杂任务,请大神指导!
任务的要求是这样的:
1.拖动随机数量的文件到bat上,例如xls文件,copy成xls1文件(不是单纯重命名,是复制后修改扩展名);
2.将第一步的文件打包成一个压缩包,压缩格式为rar或zip,系统已安装winrar;
3.将压缩包中的文件名由xls1改回xls,此步尽量不解压,直接在压缩包中修改。(压缩包文件名不限);
4.打开刚创建压缩包。


请大神指导,我现在只会第一步,还是单文件操作,这一套操作最好在一个bat文件中,只需将待处理的文件拉到bat上即可完成。如第三步不能实现可去掉此步骤,实现其他即可。

压缩打包时就可以改名 没必要再重命名了

TOP

文件夹改名可以先把文件复制到你需要的路径,然后在压缩。

命令 RN - 重命名压缩文件


--------------------------------------------------------------------------------


重命名压缩文件。这个命令只支持 RAR 压缩文件格式。命令语法是:

winrar rn <压缩文件名> <源文件名1> <目标文件名 1> <源文件名N> < 目标文件名N>

例如,下列命令:

WinRAR rn data.rar readme.txt readme.bak info.txt info.bak

在压缩文件 data.rar 中将把 readme.txt 重命名为 readme.bak 并把 info.txt 重命名为 info.bak。

在源文件和目标文件名中可以使用统配符来进行简单像改变文件扩展名的名称转换。例如 :

WinRAR rn data.rar *.txt *.bak

将把所有的 *.txt 文件重命名为 *.bak。

WinRAR 不检查目标文件名是否已经在压缩文件中存在,所以您需要小心,防止重名。尤其是使用统配符时特别重要。这个命令有潜在的危险,因为一个错误的统配符可以损坏所有的压缩文件名。

TOP

回复 5# xczxczxcz

因为就是有这个需求啊,还必须是copy源文件同时改名,理由什么原因就不说了,总之核心需求就两个,一个是copy改名,一个是打包后改回,为了实现这两个功能绞尽脑汁啊,同时明确一下系统是win7,谢谢大神!

TOP

我百度了一个框架,经过自己的修改已经能初步完成我的需求了,不过还有两个瑕疵,希望有高人来挑战一下:
1.只能处理文件,不能处理文件夹;
2.压缩包内文件名只能处理几种,不能自动通配。
请大神解读我的代码,并完善,谢谢!
  1. @echo off
  2. rem 拖放/拖拽文件到bat文件图标上实现修改文件扩展名/后缀名
  3. title 完成后请打开ok.zip
  4. setlocal enabledelayedexpansion
  5. >"%tmp%\t.t" echo;!cmdcmdline!
  6. endlocal
  7. >"%tmp%\j.j" echo;s=WSH.StdIn.ReadLine().replace(/^^.+?\.(bat^|cmd)"/i,'');
  8. >>"%tmp%\j.j" echo;WSH.echo(s.replace(/"/g,'').replace(/\s(?=[a-z]:)/ig,'\r\n'));
  9. set "n="
  10. for /f "delims=" %%a in ('type "%tmp%\t.t"^|cscript -nologo -e:jscript "%tmp%\j.j"') do (
  11.     set /a n+=1
  12.     echo; "%%a" --^> "%%a1"
  13.     copy "%%a" "%%a1" & "C:\Program Files (x86)\WinRAR\Rar.exe" m -ep1 -r -idq "ok.zip" "%%a1"
  14. )
  15. if not defined n (echo;拖放文件或文件夹到bat文件图标上&goto end)
  16. :end
  17. "C:\Program Files (x86)\WinRAR\Rar.exe" rn -idq ok.zip *.xls1 *.xls *.doc1 *.doc *.ppt1 *.ppt
  18. >nul ping -n 5 0
  19. exit
复制代码

TOP

回复 2# smss


    大佬,你这个貌似不能解决我的问题啊,我试了一下是失败的,而且我也没看出有复制重命名的操作。请大佬再看看代码可以优化吗?或者看看我下边的回帖中的代码可以再优化吗?谢谢!

TOP

本帖最后由 smss 于 2020-3-11 09:56 编辑
  1. @echo off
  2. path "C:\Program Files\WinRAR\";%path%
  3. for /d %%i in ("%*") do (
  4.     for /d %%j in ("%%i\*") do WinRAR a -ep1 -afzip -r "%%j.zip" "%%j\*"
  5. )
  6. pause
复制代码
注意:拖拽文件名中不能含空格特殊符号

TOP

返回列表