【发布时间】:2020-04-07 21:32:20
【问题描述】:
我正在编写一个存档脚本,它将所需文件收集到一个数组中,然后将它们逐个添加到存档中。
当存在 DIR1/file.ext 和 DIR2/file.ext 时,我遇到了问题,因为 DIR2 的文件将覆盖以前的文件。
如何设置唯一的文件名或如何即时解决它,而不是将文件复制到具有结构的目录然后压缩整个目录?
这是我的代码:
# GET FILE LIST
$outgoingfiles = Get-ChildItem -Depth 1 -Filter "*.EXT" | Where-Object { $_.DirectoryName -like "*OUTGOING*" }
# Handle if OUTGOING/archive dir is exists
if(-not (Test-Path "OUTGOING/archive")) {
New-Item -Path "OUTGOING/archive" -ItemType Directory
}
# ZIP outgoing files
ForEach ($outgoing in $outgoingfiles) {
Compress-Archive $outgoing.FullName -Update -DestinationPath $zippath
}
谢谢!
【问题讨论】:
-
文件名是否重要 - 例如。需要保存吗?
-
所以据我了解,您希望将所有同名文件复制到一个平面目录而不保留文件夹,但要确保文件不会相互覆盖。
-
必须保留原始文件名,但可以扩展例如原始父目录,因此 DIR1\file.ext 可以是存档中的 dir1_file.ext。在存档中保留目录也很好。
-
我猜另一种方法是在文件名中嵌入时间戳,但这可能有风险,因为可能同时创建了两个文件。
-
如何在此代码中操作存档中的文件名?
Compress-Archive $outgoing.FullName -Update -DestinationPath $zippath
标签: powershell