Перемещение файлов в соответствующее местоположение в зависимости от их расширения. - PullRequest
4 голосов
/ 02 мая 2011

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

Например, файл с расширением .xls будет перемещен в папку ~ \ XLS, из .sql в ~ \ SQL и т. Д. Вот мой сценарий.

$dirtyfolder = "\\server\c$\Documents and Settings\user\Desktop\"
$org = "\\BACKUPS\users\"
dir $dirtyfolder -fil *.doc | mv -dest "$($org)ORG\doc"
dir $dirtyfolder -fil *.txt | mv -dest "$($org)ORG\txt"
dir $dirtyfolder -fil *.sql | mv -dest "$($org)ORG\sql"
dir $dirtyfolder -fil *.log | mv -dest "$($org)ORG\log"
dir $dirtyfolder -fil *.zip | mv -dest "$($org)ORG\zip"
dir $dirtyfolder -fil *.7z | mv -dest "$($org)ORG\zip"
dir $dirtyfolder -fil *.png | mv -dest "$($org)ORG\img"
dir $dirtyfolder -fil *.jpg | mv -dest "$($org)ORG\img"
dir $dirtyfolder -fil *.mp3 | mv -dest "$($org)ORG\mp3"

Я полностью осознаю, что это нелегким образом для достижения моей цели. Поэтому я хотел бы знать, как я могу изменить сценарий, чтобы я мог

  1. повторное использование кода
  2. если папка назначения не существует, ее следует создать.
  3. группирует подобные расширения, такие как png и jpg

Ответы [ 2 ]

5 голосов
/ 02 мая 2011

Протестировано. (Не рекурсивное) решение, которое не управляет группировкой:

ls $dirtyfolder/* | ? {!$_.PSIsContainer} | %{
  $dest = "$($org)ORG\$($_.extension)"
  if (! (Test-Path -path $dest ) ) {
    new-item $dest -type directory
  }
  mv -path $_.fullname -destination $dest 
}

Решение с группировкой:

ls $dirtyfolder/* | ? {!$_.PSIsContainer} | %{
  $dest = "$($org)ORG\$(get-destbytype $_.extension)"
  if (! (Test-Path -path $dest ) ) {
    new-item $dest -type directory
  }
  mv -path $_.fullname -destination $dest 
}

где get-destbytype - следующая функция:

function get-destbytype($ext) {
 Switch ($ext)
 {
  {$ext -match '(jpg|png|gif)'} { "images" }
  {$ext -match '(sql|ps1)'} { "scripts" }
  default {"$ext" }
 }
}
1 голос
/ 02 мая 2011

Это мой рабочий тест

$source = "e:\source" 
$dest = "e:\dest"
$file = gci $source | ? {-not $_.psiscontainer} 
$file | group -property extension | 
        % {if(!(test-path(join-path $dest -child $_.name.replace('.','')))) { new-item -type directory $(join-path $dest -child $_.name.replace('.','')).toupper() }}
$file | % {  move-item $_.fullname -destination $(join-path $dest -child $_.extension.replace(".",""))}

Скрипт найдет все различные расширения в исходной папке.Для каждого расширения, если папка еще не существует в пределах места назначения, она будет создана.Последняя строка будет зацикливать каждый файл из источника и перемещать его в место назначения нужной подпапки.

Если вы хотите поместить изображения с разными расширениями в одну и ту же папку, вам нужно выполнить дополнительную проверку, используя переключатель if илизаявление.

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