我有一个大型文件目录,其中许多(但不是全部)已经通过复制它们并在其文件名和扩展名之间插入.backup来备份。使用PowerShell我想创建另一个备份,只备份已经备份过一次的文件,这次标记为.backup。(日期)。
我对powershell仍然很新,所以我的基础知识有些不稳定。在这种情况下,我无法思考的障碍是如何选择与.backup存在相同文件名的文件。获取.backup文件,我可以做,但然后得到他们的.backup-less对应物并将它们传递给管道我还不能做。从本质上讲,我想我很好奇有一个Exists运算符用于where-object或其他东西。
有什么想法吗?
答案 0 :(得分:3)
这应该为您提供具有现有备份的文件名的列表:
$files = gci <directory path> -name
$backups = $files | where {$_ -match "\.backup\.[^\.]+$"}
$backedup = $backups | foreach {$_ -replace "backup\."}
$newbackups = $backedup | where {$files -contains $_}
获取所有.backup的名称。文件。
从名称中删除.backup
查看原始文件列表是否具有与左侧相匹配的名称。
答案 1 :(得分:0)
这就是我最终的目标。
get-childitem | ?{$_.name -match '.*backup\..*'} | %{$_.name -replace 'backup\.',''} | %{get-childitem $_} | copy-item -destination {$_.name -replace '\.([^.]*)$','.backup.2011-01-25.$1'}