标题: [文件操作] 请问怎么用批处理建立压缩文件 [打印本页]
作者: o0star0o 时间: 2020-5-24 11:33 标题: 请问怎么用批处理建立压缩文件
我的文件夹中有很多html文件,利用百度云盘同步总是识别出错导致无法同步,请问怎么全部给建立成压缩文件
1.html文件是分别在各个文件夹各个目录中的
2.能否用一个命令实现,把所有文件夹及子目录中的html与htm文件,全部单独建立成压缩包,还是存在相同的路劲,还是用相同的文件名
3.(另外文件创建日期,能否修改?能否就用当时html文件的日期?)
作者: Batcher 时间: 2020-5-24 20:22
回复 1# o0star0o
你电脑上是否安装了 7-Zip 或者 WinRAR ?
作者: smss 时间: 2020-5-24 20:49
本帖最后由 smss 于 2020-5-24 21:03 编辑
- @echo off
- for /f "delims=" %%i in ('dir /b /ad') do (for /f "delims=" %%j in ('dir /b /s "%%i"') do "C:\Program Files\7-Zip\7z.exe" a "%%~dpnj.zip" "%%j")
- pause
复制代码
或者- @echo off
- for /f "delims=" %%i in ('dir /b /ad') do (for /f "delims=" %%j in ('dir /b /s "%%i"') do "C:\Program Files\7-Zip\7z.exe" a "%%~nj.zip" "%%j")
- pause
复制代码
作者: WHY 时间: 2020-5-24 22:28
本帖最后由 WHY 于 2020-5-28 19:10 编辑
PowerShell脚本- $srcDir = 'E:\Test\html'; #源文件夹路径
- $rar = 'C:\Program Files\WinRAR\WinRAR.exe'; #WinRAR程序安装路径
- $ws = New-Object -com 'WScript.Shell';
-
- dir $srcDir -Include *.html, *.htm -Recurse | ?{$_ -is [IO.FileInfo]} | forEach{
- $dt1 = $_.CreationTime.ToString('yyyy-MM-dd HH:mm:ss'); #源文件创建日期
- $dt2 = $_.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss'); #源文件修改日期
- $dt3 = $_.LastAccessTime.ToString('yyyy-MM-dd HH:mm:ss'); #源文件访问日期
- $zipFile = $_.DirectoryName + '\' + $_.BaseName + '.zip';
- $null = $ws.Run('"' + $rar + '" a -df -ep -afzip "' + $zipFile + '" "' + $_.FullName + '"', 1, $true); #压缩
- $item = get-Item -Literal $zipFile;
- $item.CreationTime = $dt1; #zip文件创建日期
- $item.LastWriteTime = $dt2; #zip文件修改日期
- $item.LastAccessTime = $dt3; #zip文件访问日期
- }
-
- echo 'Done';
- [Console]::ReadLine()
复制代码
作者: o0star0o 时间: 2020-5-25 20:39
本帖最后由 o0star0o 于 2020-5-25 20:42 编辑
回复 4# WHY
$srcDir = 'E:\Test\html'; #源文件夹路径
请问这样写,是会对E:\Test\整个目录以及子目录下的文件夹所有的html进行处理吗?还是只处理这一个?另外我是想对X目录下以及这个目录下的子目录中的所有html和htm文件进行建立压缩包,并要删除原htm文件,如果可以把rar的创建日修改为和htm的日期一样就完美了,因为文件都是按日期排序的
作者: o0star0o 时间: 2020-5-25 20:40
本帖最后由 o0star0o 于 2020-5-25 20:42 编辑
回复 3# smss
谢谢回复,看您的代码还比较简洁,7zip我可以改成360zip吧,请问这个文件夹目录怎么改呢?这个是针对全盘的吗?
另外我是想对X目录下以及这个目录下的子目录中的所有html和htm文件进行建立压缩包,并要删除原htm文件,如果可以把rar的创建日修改为和htm的日期一样就完美了,因为文件都是按日期排序的
作者: o0star0o 时间: 2020-5-25 20:45
回复 2# Batcher
您好Admin,装了360zip的,我也可以取下载安装,下面有两位朋友回复了代码,请您检阅
作者: WHY 时间: 2020-5-26 22:04
回复 5# o0star0o
是对 E:\Test\html 文件夹及其子文件夹下面的 html、htm 文件执行压缩。
WinRAR命令有一个参数 -df,压缩后删除源文件,自己加上即可。
作者: WHY 时间: 2020-5-26 22:09
本帖最后由 WHY 于 2020-5-28 19:11 编辑
如果是 PowerShell v3.0 以上版本,可以这样:- $srcDir = 'E:\Test\html'; #源文件夹路径
- dir $srcDir -Include *.html, *.htm -Recurse -File | forEach{
- $dt1 = $_.CreationTime.ToString('yyyy-MM-dd HH:mm:ss'); #源文件创建日期
- $dt2 = $_.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss'); #源文件修改日期
- $dt3 = $_.LastAccessTime.ToString('yyyy-MM-dd HH:mm:ss'); #源文件访问日期
- $zipFile = $_.DirectoryName + '\' + $_.BaseName + '.zip';
- Compress-Archive -Literal $_.FullName -Dest $zipFile | Out-Null; #压缩
- del -Literal $_.FullName -Force; #删除源文件
- $item = get-Item -Literal $zipFile;
- $item.CreationTime = $dt1; #zip文件创建日期
- $item.LastWriteTime = $dt2; #zip文件修改日期
- $item.LastAccessTime = $dt3; #zip文件访问日期
- }
- pause
复制代码
作者: WHY 时间: 2020-5-26 22:14
本帖最后由 WHY 于 2020-5-28 19:13 编辑
也可以用 Shell.Application 组件方法,但要分两个步骤,两个脚本
Test1.ps1- $srcDir = 'E:\Test\html'; #源文件夹路径
- $objShell = New-Object -Com 'Shell.Application';
-
- dir $srcDir -Include *.html, *.htm -Recurse | ?{$_ -is [IO.FileInfo]} | forEach{
- $zipFile = $_.DirectoryName + '\' + $_.BaseName + '.zip';
- [IO.File]::WriteAllText( $zipFile, 'PK' + [char]5 + [char]6 + (''+[char]0)*18 ); #写入zip头标记
- $objItem = $objShell.NameSpace($_.DirectoryName).ParseName($_.Name);
- $objShell.NameSpace($zipFile).CopyHere($objItem); #压缩
- }
-
- echo 'Done';
- [Console]::ReadLine()
复制代码
Test2.ps1- $srcDir = 'E:\Test\html'; #源文件夹路径
-
- dir $srcDir -Include *.html, *.htm -Recurse | ?{$_ -is [IO.FileInfo]} | forEach{
- $zipFile = $_.DirectoryName + '\' + $_.BaseName + '.zip';
- if( ![IO.File]::Exists($zipFile) ){ continue;}
- $dt1 = $_.CreationTime.ToString('yyyy-MM-dd HH:mm:ss'); #源文件创建日期
- $dt2 = $_.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss'); #源文件修改日期
- $dt3 = $_.LastAccessTime.ToString('yyyy-MM-dd HH:mm:ss'); #源文件访问日期
- del -Literal $_.FullName -Force; #删除
- $item = get-Item -Literal $zipFile;
- $item.CreationTime = $dt1; #zip文件创建日期
- $item.LastWriteTime = $dt2; #zip文件修改日期
- $item.LastAccessTime = $dt3; #zip文件访问日期
- }
-
- echo 'Done';
- [Console]::ReadLine()
复制代码
作者: o0star0o 时间: 2020-5-27 21:58
回复 9# WHY
谢谢回复,经测算,可以运行,能建立并删除html文件,第二个用2个步骤的日期修改的是“创建文件”的日期,需要把“创建文件”和 “修改文件”的日期,都同时修改为html文件的创建日期,这样就能正确的按日期排序了,麻烦您帮我修改下吧,谢谢!(另外第一个单独的代码还是比较好,运行一个就行了,但是那个代码改不了日期)
作者: WHY 时间: 2020-5-28 19:05
你把创建时间、修改时间搞反了吧?
Windows资源管理器按时间排序是以“修改日期”排序的,而不是“创建日期”
另外第一个单独的代码还是比较好,运行一个就行了,但是那个代码改不了日期
你应该右击zip文件,在属性中查看创建日期是否修改。
作者: WHY 时间: 2020-5-28 19:15
脚本已修改,把 zip 压缩文件的三个日期改成与 html 一致。
作者: o0star0o 时间: 2020-5-28 23:41
本帖最后由 o0star0o 于 2020-5-29 00:00 编辑
回复 13# WHY
你好,我测试了下,在单独存个文件夹可以运行,我需要处理的文件夹不能运行呢,E:\Test\html文件夹路径不能为中文吗?提示的是路径不存在,但是路径是正确的,我直接复制的。那个文件夹路径比较深,不好改,能否支持下中文路径呢?您可以测试下,我单独放个中文名字的文件夹就运行不了
作者: WHY 时间: 2020-5-29 10:57
本帖最后由 WHY 于 2020-5-29 10:59 编辑
回复 14# o0star0o
猜测你脚本保存的是 UTF-8 without BOM 编码格式。
如果没有特殊需要,直接保存为 ansi 编码即可。
脚本用记事本打开,文件——另存为——选择编码 ansi
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |