标题: [文本处理] [已解决]批处理使用 MakeCAB 压缩当前目录(含子目录)下的所有文件 [打印本页]
作者: chishingchan 时间: 2023-4-5 20:37 标题: [已解决]批处理使用 MakeCAB 压缩当前目录(含子目录)下的所有文件
找到了相关的帖子:
http://bbs.bathome.net/viewthread.php?tid=10715- @echo off
- if "%~1"=="" goto :eof
- setlocal enableDelayedExpansion
- cd/d %~dp1
- set List=L.lst
- cd.>%List%
- for /f "delims=" %%f in ('"dir/b/a-d "%~f1" 2>nul"')do echo="%~nx1\%%f">>%List%
- for /f "delims=" %%d in ('dir/s/b/ad "%~f1"')do (
- set D1=%%d
- set D1=!d1:%~f1\=!
- echo=.set DestinationDir=!D1!>>%List%
- for /f "delims=" %%f in ('"dir/b/a-d "%%d" 2>nul"')do echo="%%d\%%f">>%List%
- )
- makecab /f %List% /d CabinetNameTemplate="..\%~n1.CAB"
- rd/s/q disk1
- del/a/f/q setup.inf;setup.rpt;%List%
复制代码
但这个例子是拖拉目录到批处理上,即只处理单个文件夹!
例如:当前目录有一些文件及有两(或N)个文件夹:cfg 和 files
当前目录的 一些文件 忽略,将那两(或N)个文件夹的文件列表:- .set DestinationDir="cfg"
- "cfg\filename.ext"
- .set DestinationDir="files"
- "files\filename.ext"
- .set DestinationDir="files\dir"
- "files\dir\filename.ext"
- .
- .
- .
复制代码
请帮忙写个批处理,谢谢!
谢谢七哥的解答:- @echo off
- cd /d "%~dp0"
- setlocal enabledelayedexpansion
- for /f "delims=" %%e in ('dir /b /on /s /ad 2^>nul') do (
- set "str=%%e"
- set "str=!str:%cd%\=!"
- >>"%~dp0FileList.txt" echo .set DestinationDir="!str!"
- pushd "%%e"
- for /f "delims=" %%j in ('dir /b /on /a-d 2^>nul') do (
- set "str2=%%~fj"
- set "str2=!str2:%cd%\=!"
- >>"%~dp0FileList.txt" echo "!str2!"
- )
- popd
- )
- endlocal
复制代码
作者: 77七 时间: 2023-4-5 23:19
- @echo off
- setlocal enabledelayedexpansion
- cd /d "%~dp0"
- for /f "delims=" %%d in ('dir /b /ad') do (
- for /f "delims=" %%i in ('dir /b /a-d "%%d" 2^>nul') do (
- >>"%~dp0L.lst" echo "%%~nxd\%%~nxi"
- )
- for /f "delims=" %%e in ('dir /b /s /ad "%%d" 2^>nul') do (
- set "str=%%e"
- set "str=!str:%%~fd\=!"
- >>"%~dp0L.lst" echo .set DestinationDir=!str!
- pushd "%%e"
- for /f "delims=" %%j in ('dir /b /a-d 2^>nul') do (
- >>"%~dp0L.lst" echo "%%~fj"
- )
- popd
- )
- makecab /f L.lst /d CabinetNameTemplate="..\%%~nxd.CAB"
- rd /s /q disk1
- del /a /f /q setup.inf;setup.rpt;L.lst
- )
- endlocal
- pause
复制代码
压缩当前目录下的文件夹,每个文件夹单独压缩
作者: chishingchan 时间: 2023-4-6 15:31
回复 2# 77七
谢谢七哥!但不符合要求,是我说的不清楚,不好意思!
文件及附件我都不能上传,可能权限不足,只能文字表达了:- C:\DIR
- │ FileList.cmd 批处理
- │ FileList.txt 批处理生成的文件
- │ FILE1.TXT 与批处理同目录的所有文件都被忽略
- ├─DIR1
- │ └─FILE2.TXT
- └─DIR2
- ├─FILE3.TXT
- └─DIR3
- └─FILE4.TXT
复制代码
生成的列表文件应该是下面的样子:FileList.txt- .set DestinationDir="DIR1"
- "DIR1\FILE2.txt"
- .set DestinationDir="DIR2"
- "DIR2\FILE3.txt"
- .set DestinationDir="DIR2\DIR3"
- "DIR2\DIR3\FILE4.txt"
复制代码
希望七哥再助力,谢谢!
作者: 77七 时间: 2023-4-6 18:10
回复 3# chishingchan
我不是很明白,我写的代码和你在一楼贴的批处理代码,生成的文件列表是一致的。
你在3楼贴的列表, 是一个列表,还是两个列表贴到一起了?是要把dir1 和dir2 压缩到一起?还是单纯的根据你期待的列表生成就行?
作者: chishingchan 时间: 2023-4-6 18:51
回复 4# 77七
第一个 code 框是 目录、文件结构(例子)
第二个 code 框是需要生成的 最后结果
最后总只生成一个 FileList.txt 文件,并只能生成一个 CAB 才正确。3楼的每个目录都生成 CAB 是不对的。
作者: chishingchan 时间: 2023-4-6 19:07
本帖最后由 chishingchan 于 2023-4-6 20:40 编辑
回复 4# 77七
请七哥下载这个附件就明白了,非常谢谢!
作者: 77七 时间: 2023-4-6 19:33
本帖最后由 77七 于 2023-4-6 19:43 编辑
回复 5# chishingchan
- @echo off
- setlocal enabledelayedexpansion
- cd /d "%~dp0"
- for /f "delims=" %%e in ('dir /b /s /ad 2^>nul') do (
- set "str=%%e"
- set "str=!str:%cd%\=!"
- >>"%~dp0L.lst" echo .set DestinationDir=!str!
- pushd "%%e"
- for /f "delims=" %%j in ('dir /b /a-d 2^>nul') do (
- set "str2=%%~fj"
- set "str2=!str2:%cd%\=!"
- >>"%~dp0L.lst" echo "!str2!"
- )
- popd
- )
- for /f "delims=" %%i in ("%~f0\..") do (
- makecab /f L.lst /d CabinetNameTemplate="..\%%~nxi.CAB"
- )
- rd /s /q disk1
- del /a /f /q setup.inf;setup.rpt;L.lst
- endlocal
- pause
复制代码
所以,相当于在压缩一个文件夹,比1楼和2楼代码都省事
或者把当前目录中的所有文件夹移动到一个新文件夹中再用1楼或者2楼代码
作者: chishingchan 时间: 2023-4-6 19:38
回复 7# 77七
请问能否将下面 C:\DIR\ 字符去掉?谢谢!- .set DestinationDir=DIR1
- "C:\DIR\DIR1\FILE2.txt"
- .set DestinationDir=DIR2
- "C:\DIR\DIR2\FILE3.txt"
- .set DestinationDir=DIR2\DIR3
- "C:\DIR\DIR2\DIR3\FILE4.txt"
复制代码
作者: 77七 时间: 2023-4-6 19:44
回复 8# chishingchan
已修改,不必每次都评分。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |