Выборочное переименование файлов в Powershell - PullRequest
2 голосов
/ 26 января 2011

У меня есть большой каталог файлов, многие (но не все) были скопированы на место посредством их копирования и вставки .backup между их именем файла и расширением. Используя PowerShell, я хотел бы создать еще одну резервную копию только тех файлов, которые уже были зарезервированы один раз, на этот раз с тегом .backup. (Date).

Я все еще очень плохо знаком с PowerShell, поэтому я немного шаткую по основам. В этом случае загвоздка, которую я не могу обдумать, заключается в том, как я бы выбрал файлы, для которых существует идентичное имя файла с .backup. Получить файлы .backup я могу, но потом получить их копии без .back и передать их в канал, пока не могу. По сути, я думаю, мне любопытно, есть ли оператор Exists для использования в объекте where или что-то в этом роде.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 26 января 2011

Это должно дать вам список имен файлов тех, у которых есть существующая резервная копия:

 $files = gci <directory path> -name
  $backups = $files | where {$_ -match "\.backup\.[^\.]+$"}
  $backedup = $backups | foreach {$_ -replace "backup\."} 
  $newbackups = $backedup | where  {$files -contains $_}

Получить имена всех .backup.файлы.
Удалите .backup из имени.
Проверьте, есть ли у исходного списка файлов имя, которое совпадает с тем, что осталось.

0 голосов
/ 26 января 2011

Вот что у меня получилось.

get-childitem | ?{$_.name -match '.*backup\..*'} | %{$_.name -replace 'backup\.',''} | %{get-childitem $_} | copy-item -destination {$_.name -replace '\.([^.]*)$','.backup.2011-01-25.$1'}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...