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. 宛先フォルダが存在しない場合は、作成する必要があります。
  3. pngやjpgなどの同様の拡張機能をグループ化する
4

2 に答える 2

5

テスト済み。グループ化を管理しない(再帰的ではない)ソリューション:

ls $ dirtyfolder / * | ?{!$_。PSIsContainer}| %{
  $ dest = "$($ org)ORG \ $($ _。extension)"
  if(!(Test-Path -path $ dest)){
    new-item$destタイプのディレクトリ
  }
  mv -path$_。fullname-destination$ dest
}

グループ化による解決策:

ls $ dirtyfolder / * | ?{!$_。PSIsContainer}| %{
  $ dest = "$($ org)ORG \ $(get-destbytype $ _。extension)"
  if(!(Test-Path -path $ dest)){
    new-item$destタイプのディレクトリ
  }
  mv -path$_。fullname-destination$ dest
}

get-destbytype次の関数はどこにありますか。

関数get-destbytype($ ext){
 スイッチ($ ext)
 {{
  {$ ext -match'(jpg | png | gif)'} {"images"}
  {$ ext -match'(sql | ps1)'} {"scripts"}
  デフォルト{"$ext"}
 }
}
于 2011-05-02T17:06:19.760 に答える
1

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

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

于 2011-05-02T17:46:16.350 に答える