无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4953|回复: 12
打印 上一主题 下一主题

[原创] 文件,文件夹自打包解包工具

[复制链接]
跳转到指定楼层
1#
发表于 2021-12-29 11:12:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kingshui 于 2021-12-31 11:36 编辑

如标题,就是一个使用windows自带工具(内外置命令)写的一个方便打包文件的小工具

将文件或者文件夹拖放到批处理上会自动生成另一个自解压的批处理,生成的批处理自带父文件的打包功能,可重复利用。

  1. @echo off
  2. set "_n=%~0"
  3. if "%~1" NEQ "" goto packagemod
  4. for /f "usebackq delims==" %%a in ("%_n%") do set "name=%%a"
  5. certutil -decode "%_n%" "%~n0.cab"
  6. md "%~n0"
  7. expand -r "%~n0.cab" ".\%~n0" |find "-F" && expand "%~n0.cab" -F:* ".\%~n0" >nul
  8. del "%~n0.cab" & explorer "%~n0"
  9. exit

  10. :packagemod
  11. set cmdstr=MAKECAB /v3 /D CompressionType=LZX /D CompressionMemory=21 /D MaxDiskSize=CDROM /D Cabinet=On /D Compress=On /D FolderSizeThreshold=5000000 /D DiskDirectoryTemplate="%~dp1." /D CabinetNameTemplate="tmp.cab"
  12. if exist "%~1" (
  13.         for /f "delims=" %%a in ('dir "%~1" /a-d /s /b') do (        
  14.                 setlocal enabledelayedexpansion
  15.                 set x=%%a
  16.                 set x=!x:%~dp1=!
  17.                 echo "%%a" "!x!">>cabstr         
  18.                 endlocal
  19.                 )) else (
  20.                 echo "%~1" "%~nx1" >>cabstr
  21.                 )
  22. if "%~2" neq "" shift&goto packagemod        
  23. %cmdstr% /F cabstr >nul
  24. del /f/q patch cab cabstr SETUP.INF SETUP.RPT >nul
  25. powershell -C "& {$outpath = (Join-Path (pwd) '%~n1.base64'); $inpath = (Join-Path (pwd) 'tmp.cab'); [IO.File]::WriteAllText($outpath, ([convert]::ToBase64String(([IO.File]::ReadAllBytes($inpath)))))}"
  26. for /f "delims=" %%i in (%_n%) do (
  27.         if "%%i" EQU ":encoding" goto :next
  28.         echo,%%i>>"%~n1.cmd"
  29.         )
  30. :next
  31. set "certb=BEGIN CERTIFICATE"
  32. set "certe=END CERTIFICATE"
  33. set "dash=-----"
  34. echo :encoding>>"%~n1.cmd"
  35. echo,%dash%%certb%%dash%>>"%~n1.cmd"
  36. type "%~n1.base64" >>"%~n1.cmd"
  37. echo,>>"%~n1.cmd"
  38. echo,%dash%%certe%%dash%>>"%~n1.cmd"
  39. echo %~nx1>>"%~n1.cmd"
  40. del tmp.cab "%~n1.base64"
  41. exit
复制代码


2#
发表于 2021-12-29 13:42:12 | 只看该作者
学习一下。。。
回复

使用道具 举报

3#
发表于 2021-12-29 13:42:45 | 只看该作者
这个打包的格式是CAB么?
回复

使用道具 举报

4#
发表于 2021-12-29 14:39:15 | 只看该作者
谢谢分享。
回复

使用道具 举报

5#
发表于 2021-12-29 18:33:58 | 只看该作者
打开这个帖子,浏览器居然提示是否翻译。
回复

使用道具 举报

6#
发表于 2021-12-29 20:21:51 | 只看该作者
本帖最后由 holley2008 于 2021-12-29 20:23 编辑

随后拖了个txt试了一下,,还原不了了- -~~~别的类型 源文件都会在  
txt会直接不在掉

点评

代码已经更新。  详情 回复 发表于 2021-12-31 11:40
多谢反馈,我来检查一下。  详情 回复 发表于 2021-12-30 14:50
回复

使用道具 举报

7#
 楼主| 发表于 2021-12-30 14:50:55 | 只看该作者
holley2008 发表于 2021-12-29 20:21
随后拖了个txt试了一下,,还原不了了- -~~~别的类型 源文件都会在  
txt会直接不在掉

多谢反馈,我来检查一下。
回复

使用道具 举报

8#
发表于 2021-12-31 09:02:26 | 只看该作者
解压出来后能不能改为不生成文件夹?在当前目录下直接还原
另外不要系统的压缩,改为Winrar怎么以设?我试了一个WINRAR的包,打包完成后还变大了。

点评

改Winrar的话首先你要安装有Winrar,但是安装路径要查.我这个可以直接在新电脑上放出来了 最主要是现在系统加固得比较厉害,不能复制粘贴文件了,我才搞的这个,直接粘贴文本内容不受限 要在当前目录释放的话  详情 回复 发表于 2021-12-31 11:45
回复

使用道具 举报

9#
 楼主| 发表于 2021-12-31 11:40:45 | 只看该作者
holley2008 发表于 2021-12-29 20:21
随后拖了个txt试了一下,,还原不了了- -~~~别的类型 源文件都会在  
txt会直接不在掉

代码已经更新。
回复

使用道具 举报

10#
 楼主| 发表于 2021-12-31 11:45:02 | 只看该作者
ellx98 发表于 2021-12-31 09:02
解压出来后能不能改为不生成文件夹?在当前目录下直接还原
另外不要系统的压缩,改为Winrar怎么以设?我试 ...

改Winrar的话首先你要安装有Winrar,但是安装路径要查.我这个可以直接在新电脑上放出来了

最主要是现在系统加固得比较厉害,不能复制粘贴文件了,我才搞的这个,直接粘贴文本内容不受限

要在当前目录释放的话改第7行的".\%~n0" 为.\ 和第8行的&后面的内容要删掉

  1. @echo off
  2. set "_n=%~0"
  3. if "%~1" NEQ "" goto packagemod
  4. for /f "usebackq delims==" %%a in ("%_n%") do set "name=%%a"
  5. certutil -decode "%_n%" "%~n0.cab"
  6. REM md "%~n0"
  7. expand -r "%~n0.cab" .\ |find "-F" && expand "%~n0.cab" -F:* .\ >nul
  8. del "%~n0.cab" & explorer "%~n0"
  9. exit

  10. :packagemod
  11. set cmdstr=MAKECAB /v3 /D CompressionType=LZX /D CompressionMemory=21 /D MaxDiskSize=CDROM /D Cabinet=On /D Compress=On /D FolderSizeThreshold=5000000 /D DiskDirectoryTemplate="%~dp1." /D CabinetNameTemplate="tmp.cab"
  12. if exist "%~1" (
  13.         for /f "delims=" %%a in ('dir "%~1" /a-d /s /b') do (       
  14.                 setlocal enabledelayedexpansion
  15.                 set x=%%a
  16.                 set x=!x:%~dp1=!
  17.                 echo "%%a" "!x!">>cabstr        
  18.                 endlocal
  19.                 )) else (
  20.                 echo "%~1" "%~nx1" >>cabstr
  21.                 )
  22. if "%~2" neq "" shift&goto packagemod       
  23. %cmdstr% /F cabstr >nul
  24. del /f/q patch cab cabstr SETUP.INF SETUP.RPT >nul
  25. powershell -C "& {$outpath = (Join-Path (pwd) '%~n1.base64'); $inpath = (Join-Path (pwd) 'tmp.cab'); [IO.File]::WriteAllText($outpath, ([convert]::ToBase64String(([IO.File]::ReadAllBytes($inpath)))))}"
  26. for /f "delims=" %%i in (%_n%) do (
  27.         if "%%i" EQU ":encoding" goto :next
  28.         echo,%%i>>"%~n1.cmd"
  29.         )
  30. :next
  31. set "certb=BEGIN CERTIFICATE"
  32. set "certe=END CERTIFICATE"
  33. set "dash=-----"
  34. echo :encoding>>"%~n1.cmd"
  35. echo,%dash%%certb%%dash%>>"%~n1.cmd"
  36. type "%~n1.base64" >>"%~n1.cmd"
  37. echo,>>"%~n1.cmd"
  38. echo,%dash%%certe%%dash%>>"%~n1.cmd"
  39. echo %~nx1>>"%~n1.cmd"
  40. del tmp.cab "%~n1.base64"
  41. exit
复制代码
回复

使用道具 举报

11#
发表于 2021-12-31 14:11:55 | 只看该作者
没有.cab文件生成,源文件也还在,就生成了一个和源文件名一样的.cmd文件

点评

这是正确的,运行这个CMD就能还原出来源文件了,同时这个cmd也附带了父文件的功能  详情 回复 发表于 2022-1-4 09:52
回复

使用道具 举报

12#
 楼主| 发表于 2022-1-4 09:52:02 | 只看该作者
chibuzhu 发表于 2021-12-31 14:11
没有.cab文件生成,源文件也还在,就生成了一个和源文件名一样的.cmd文件

这是正确的,运行这个CMD就能还原出来源文件了,同时这个cmd也附带了父文件的功能
回复

使用道具 举报

13#
发表于 2022-1-4 18:03:55 | 只看该作者
感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-3 08:24

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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