Powershell Compress-Archive 对老化文件

Posted

技术标签:

【中文标题】Powershell Compress-Archive 对老化文件【英文标题】:Powershell Compress-Archive on aged files 【发布时间】:2016-09-01 13:57:06 【问题描述】:

我编写了一个小脚本来搜索我的一台服务器上的所有文件夹,以找到所有超过 3 年的文件。

但是,然后我想将所有符合条件的文件写入同名的存档,并且有点卡在如何实现这一点上。

到目前为止,这是我的代码......

    $limit = (Get-Date).AddYears(-3)
$Path = "L:\" 
$Path2 = "archive.zip" 

$PathB = Get-ChildItem -Path $Path -Recurse -Force | Where-Object  !$_.PSIsContainer -and $_.CreationTime -lt $Limit  
Compress-Archive -Path $Pathb -DestinationPath $Path + $Path2

我想要达到的基本上是;

目录内

> l:\

有 3 个文件超过 3 年...

Red.PDF Hello.Doc Me.JPG

我想把这三个文件添加到存档文件中;

L:\Archive-ddmmyyyy.zip

在理想情况下,所有这些已归档文件的名称将写入/附加到 L:\ 名为 archivedlog.csv 的 csv 文件中,其中列出了文件名、创建日期和存档日期。

然后,最终循环将删除原始的三个文件并保持存档完好无损。这最后一部分我认为我可以实现的其他元素不是很多。

到目前为止,我找到的是陈旧的文件,但在压缩时,例如“路径“Red.PDF”要么不存在,要么不是有效的系统文件路径。

然而,这可能是由于服务器上的文件格式错误,已保存文档的编号实际上是……的格式

'Mrs P Simpson letter 12.07.2012.docx 要么不存在,要么不是有效的文件系统路径。'

猜测是由于重复了“。”在文件名中,这可能会导致问题,但我不知道......

谁能指出我正确的方向?

我应该说这样做的目的是递归遍历 L:\ 中的每个目录,为每个子目录中属于该类别的所有文件生成一个存档。

亲切的问候

R

【问题讨论】:

【参考方案1】:

替换

Compress-Archive -Path $Pathb -DestinationPath $Path + $Path2

Compress-Archive -Path $PathB.FullName -DestinationPath $Path + $Path2

否则Compress-Archive 会认为该文件位于同一目录中。

编辑如果您希望使用包含奇怪字符的文件名,请查看-LiteralPath 路径开关。 .虽然很好。

【讨论】:

【参考方案2】:

非常感谢 gms0ulman,您的帮助让我走上了正确的道路... 我正在分享我最终想出的东西,如果它对未来的任何人有帮助,

## Sets the time scale in years for files older than that we want to delete.
$limit = (Get-Date).AddYears(-3)
## Sets the starting path for the process
$Path = "L:\" 
## Sets the save file name
$Path2 = "archive + $(get-date -f dd-MM-yyyy).zip" 
## Sets the archive logfile location
$write = "l:\archivelog-donotremove.csv"

## Runs through each file to identify files in scope and writes to object
$PathB = Get-ChildItem -Path $Path -Recurse -Force | Where-Object  !$_.PSIsContainer -and $_.CreationTime -lt $Limit  
## Adds all objects to zip file
Compress-Archive -Path $Pathb.FullName  -DestinationPath "$Path + $Path2" -Force


## Appends all data to the log file that has been archived
$PathB | export-csv -Append -Path $write -NoTypeInformation -Force

## Deletes all non compressed files that were identified
$Removal = Get-ChildItem -Path $Pathb.FullName -Recurse -Force | Where-Object  !$_.PSIsContainer -and $_.CreationTime -lt $Limit  | foreach  $_.Delete()

【讨论】:

以上是关于Powershell Compress-Archive 对老化文件的主要内容,如果未能解决你的问题,请参考以下文章

powershell PowerShell:启动PowerShell作为其他用户提升

powershell [提示输入powershell] #powershell #input #prompt

powershell 测量PowerShell命令或PowerShell脚本的速度

powershell远程下载exe并执行

powershell 使用啥端口

powershell PowerShell使用PowerShell创建本地管理员帐户