2011-05-02 3 views
4

확장명을 기반으로 파일을 적절한 사전 설정 위치로 이동시키는 정리 스크립트가 있습니다.확장자를 기반으로 적절한 위치로 파일 이동

예를 들어 확장자가 .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. 대상 폴더가 존재하지 않을 수 있다면 그래서 내가 스크립트를 수정하는 방법을 알고 싶습니다. PNG 및 JPG와 같은
  3. 그룹 유사한 확장,

답변

5

을 테스트. 그룹화 관리하지 않습니다 A (재귀되지 않음) 솔루션 : 그룹화와

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

솔루션 :

 
function get-destbytype($ext) { 
Switch ($ext) 
{ 
    {$ext -match '(jpg|png|gif)'} { "images" } 
    {$ext -match '(sql|ps1)'} { "scripts" } 
    default {"$ext" } 
} 
} 
+0

비 그룹화 솔루션을 테스트했으며 잘 작동했습니다. 그룹화 솔루션을 테스트하고 알려 드리겠습니다. 감사. :-) – Animesh

+0

+1. 아주 멋진 :) 한 가지 질문. ls $ dirtyfolder/* 대신 ls "$ ($ dirtyfolder)/*"를 사용할 이유가 있습니까? 내가 시도하고 두 명령은 모두 같다. –

+0

@ nick-rulez : ** 테스트를 거치지 않았기 때문에 실제로는 아닙니다. 잘 알고, 나는 그 때 대답을 단순화 할 것이다. –

1

이이 : get-destbytype는 다음과 같은 기능입니다

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

내 작업 테스트

$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 또는 switch 문을 사용하여 추가 확인이 필요합니다.

관련 문제