Powershell Compress-Archive对老化的文件

时间:2016-09-01 13:57:06

标签: powershell zip archive

我编写了一个小脚本来搜索我的一台服务器上的所有文件夹,找到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'要么不存在,要么不是有效的系统文件路径。

然而,这可能是因为服务器上的文件格式错误,所保存文件的数量实际上是......格式...

  

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

猜测由于重复'。'在文件名中,这可能会导致问题,但我对一个人没有任何线索......

任何人都可以指出我正确的方向吗?

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

亲切的问候

[R

2 个答案:

答案 0 :(得分:1)

替换

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

使用

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

否则Compress-Archive将期望该文件位于同一目录中。

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

答案 1 :(得分:0)

非常感谢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()}