Powershell中的选择性文件重命名

时间:2011-01-25 22:00:09

标签: powershell

我有一个大型文件目录,其中许多(但不是全部)已经通过复制它们并在其文件名和扩展名之间插入.backup来备份。使用PowerShell我想创建另一个备份,只备份已经备份过一次的文件,这次标记为.backup。(日期)。

我对powershell仍然很新,所以我的基础知识有些不稳定。在这种情况下,我无法思考的障碍是如何选择与.backup存在相同文件名的文件。获取.backup文件,我可以做,但然后得到他们的.backup-less对应物并将它们传递给管道我还不能做。从本质上讲,我想我很好奇有一个Exists运算符用于where-object或其他东西。

有什么想法吗?

2 个答案:

答案 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'}