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

PowerShell脚本
  1. $srcDir = 'E:\Test\html';                                      #源文件夹路径
  2. $rar = 'C:\Program Files\WinRAR\WinRAR.exe';                   #WinRAR程序安装路径
  3. $ws  = New-Object -com 'WScript.Shell';
  4. dir $srcDir -Include *.html, *.htm -Recurse | ?{$_ -is [IO.FileInfo]} | forEach{
  5.     $dt1 = $_.CreationTime.ToString('yyyy-MM-dd HH:mm:ss');    #源文件创建日期
  6.     $dt2 = $_.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss');   #源文件修改日期
  7.     $dt3 = $_.LastAccessTime.ToString('yyyy-MM-dd HH:mm:ss');  #源文件访问日期
  8.     $zipFile = $_.DirectoryName + '\' + $_.BaseName + '.zip';
  9.     $null = $ws.Run('"' + $rar + '" a -df -ep -afzip "' + $zipFile  + '" "' + $_.FullName + '"', 1, $true); #压缩
  10.     $item = get-Item -Literal $zipFile;
  11.     $item.CreationTime = $dt1;                                 #zip文件创建日期
  12.     $item.LastWriteTime = $dt2;                                #zip文件修改日期
  13.     $item.LastAccessTime = $dt3;                               #zip文件访问日期
  14. }
  15. echo 'Done';
  16. [Console]::ReadLine()
复制代码

TOP

回复 5# o0star0o


    是对 E:\Test\html 文件夹及其子文件夹下面的 html、htm 文件执行压缩。
WinRAR命令有一个参数 -df,压缩后删除源文件,自己加上即可。

TOP

本帖最后由 WHY 于 2020-5-28 19:11 编辑

如果是 PowerShell v3.0 以上版本,可以这样:
  1. $srcDir = 'E:\Test\html';                                      #源文件夹路径
  2. dir $srcDir -Include *.html, *.htm -Recurse -File | forEach{
  3.     $dt1 = $_.CreationTime.ToString('yyyy-MM-dd HH:mm:ss');    #源文件创建日期
  4.     $dt2 = $_.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss');   #源文件修改日期
  5.     $dt3 = $_.LastAccessTime.ToString('yyyy-MM-dd HH:mm:ss');  #源文件访问日期
  6.     $zipFile = $_.DirectoryName + '\' + $_.BaseName + '.zip';
  7.     Compress-Archive -Literal $_.FullName -Dest $zipFile | Out-Null; #压缩
  8.     del -Literal $_.FullName -Force;                           #删除源文件
  9.     $item = get-Item -Literal $zipFile;
  10.     $item.CreationTime = $dt1;                                 #zip文件创建日期
  11.     $item.LastWriteTime = $dt2;                                #zip文件修改日期
  12.     $item.LastAccessTime = $dt3;                               #zip文件访问日期
  13. }
  14. pause
复制代码

TOP

本帖最后由 WHY 于 2020-5-28 19:13 编辑

也可以用 Shell.Application 组件方法,但要分两个步骤,两个脚本
Test1.ps1
  1. $srcDir = 'E:\Test\html';                          #源文件夹路径
  2. $objShell = New-Object -Com 'Shell.Application';
  3. dir $srcDir -Include *.html, *.htm -Recurse | ?{$_ -is [IO.FileInfo]} | forEach{
  4.     $zipFile = $_.DirectoryName + '\' + $_.BaseName + '.zip';
  5.     [IO.File]::WriteAllText( $zipFile, 'PK' + [char]5 + [char]6 + (''+[char]0)*18 ); #写入zip头标记
  6.     $objItem  = $objShell.NameSpace($_.DirectoryName).ParseName($_.Name);
  7.     $objShell.NameSpace($zipFile).CopyHere($objItem);   #压缩         
  8. }
  9. echo 'Done';
  10. [Console]::ReadLine()
复制代码
Test2.ps1
  1. $srcDir = 'E:\Test\html';                                      #源文件夹路径
  2. dir $srcDir -Include *.html, *.htm -Recurse | ?{$_ -is [IO.FileInfo]} | forEach{
  3.     $zipFile = $_.DirectoryName + '\' + $_.BaseName + '.zip';
  4.     if( ![IO.File]::Exists($zipFile) ){ continue;}
  5.     $dt1 = $_.CreationTime.ToString('yyyy-MM-dd HH:mm:ss');    #源文件创建日期
  6.     $dt2 = $_.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss');   #源文件修改日期
  7.     $dt3 = $_.LastAccessTime.ToString('yyyy-MM-dd HH:mm:ss');  #源文件访问日期
  8.     del -Literal $_.FullName -Force;     #删除
  9.     $item = get-Item -Literal $zipFile;
  10.     $item.CreationTime = $dt1;                                 #zip文件创建日期
  11.     $item.LastWriteTime = $dt2;                                #zip文件修改日期
  12.     $item.LastAccessTime = $dt3;                               #zip文件访问日期
  13. }
  14. echo 'Done';
  15. [Console]::ReadLine()
复制代码

TOP

你把创建时间、修改时间搞反了吧?
Windows资源管理器按时间排序是以“修改日期”排序的,而不是“创建日期”
另外第一个单独的代码还是比较好,运行一个就行了,但是那个代码改不了日期

你应该右击zip文件,在属性中查看创建日期是否修改。

TOP

脚本已修改,把 zip 压缩文件的三个日期改成与 html 一致。

TOP

本帖最后由 WHY 于 2020-5-29 10:59 编辑

回复 14# o0star0o


    猜测你脚本保存的是 UTF-8 without BOM 编码格式。
如果没有特殊需要,直接保存为 ansi 编码即可。

脚本用记事本打开,文件——另存为——选择编码 ansi

TOP

返回列表