質問

適切なプリセットの場所への拡張機能に基づいてファイルを移動するクリーンアップスクリプトがあります。

たとえば、拡張機能.xlを備えたファイルは、〜 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などの同様の拡張機能をグループ化します
役に立ちましたか?

解決

テスト。グループ化を管理しない(非回復的)ソリューション:

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" }
 }
}

他のヒント

これは私の作業テストです

$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ステートメントを使用して、さらにチェックする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top