无忧启动论坛

标题: 文件,文件夹自打包解包工具 [打印本页]

作者: kingshui    时间: 2021-12-29 11:12
标题: 文件,文件夹自打包解包工具
本帖最后由 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
复制代码



作者: lr    时间: 2021-12-29 13:42
学习一下。。。
作者: juyz    时间: 2021-12-29 13:42
这个打包的格式是CAB么?
作者: a123456789z    时间: 2021-12-29 14:39
谢谢分享。
作者: 旁观者清    时间: 2021-12-29 18:33
打开这个帖子,浏览器居然提示是否翻译。
作者: holley2008    时间: 2021-12-29 20:21
本帖最后由 holley2008 于 2021-12-29 20:23 编辑

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

作者: kingshui    时间: 2021-12-30 14:50
holley2008 发表于 2021-12-29 20:21
随后拖了个txt试了一下,,还原不了了- -~~~别的类型 源文件都会在  
txt会直接不在掉

多谢反馈,我来检查一下。
作者: ellx98    时间: 2021-12-31 09:02
解压出来后能不能改为不生成文件夹?在当前目录下直接还原
另外不要系统的压缩,改为Winrar怎么以设?我试了一个WINRAR的包,打包完成后还变大了。
作者: kingshui    时间: 2021-12-31 11:40
holley2008 发表于 2021-12-29 20:21
随后拖了个txt试了一下,,还原不了了- -~~~别的类型 源文件都会在  
txt会直接不在掉

代码已经更新。
作者: kingshui    时间: 2021-12-31 11:45
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
复制代码

作者: chibuzhu    时间: 2021-12-31 14:11
没有.cab文件生成,源文件也还在,就生成了一个和源文件名一样的.cmd文件
作者: kingshui    时间: 2022-1-4 09:52
chibuzhu 发表于 2021-12-31 14:11
没有.cab文件生成,源文件也还在,就生成了一个和源文件名一样的.cmd文件

这是正确的,运行这个CMD就能还原出来源文件了,同时这个cmd也附带了父文件的功能
作者: loka    时间: 2022-1-4 18:03
感谢分享




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3