次のファイル名のフォルダがあります。
00150005D201110172338427995.vpf
00150005D201110180005318058.vpf
00150013D201110180014448082.vpf
00150013D201110180022268098.vpf
00150013D201110180056118137.vpf
00150004D201110180102008142.vpf
00150004D201110180105398145.vpf
00150016D201110180115378151.vpf
00150016D201110180122168161.vpf
00150003Z201110180143308169.vpf
00150050S201110180232190009.vpf
各ファイルは、一意の識別子である9文字の文字列で始まります。これらのフォルダーをファイルごとに解析し、9文字のプレフィックスに基づいて、プレフィックス名を使用してフォルダーを作成し、ファイルを新しく作成したフォルダーに移動できるようにしたいと思います。
例:
前:
f:\ION\2011291 Contains the following files
00150005D201110172338427995.vpf
00150005D201110180005318058.vpf
00150013D201110180014448082.vpf
00150013D201110180022268098.vpf
00150013D201110180056118137.vpf
00150004D201110180102008142.vpf
00150004D201110180105398145.vpf
00150016D201110180115378151.vpf
00150016D201110180122168161.vpf
00150003Z201110180143308169.vpf
00150050S201110180232190009.vpf
後:
F:\ION\2011291 contins only folders no files
F:\ION\2011291\00150005D contains
00150005D201110172338427995.vpf
00150005D201110180005318058.vpf
F:\ION\2011291\00150013D\ contains
00150013D201110180014448082.vpf
00150013D201110180022268098.vpf
00150013D201110180056118137.vpf
F:\ION\2011291\00150004D \contains
00150004D201110180102008142.vpf
00150004D201110180105398145.vpf
F:\ION\2011291\00150016D\ contains
00150016D201110180115378151.vpf
00150016D201110180122168161.vpf
F:\ION\2011291\00150003Z\ contains
00150003Z201110180143308169.vpf
F:\ION\2011291\00150050S
00150050S201110180232190009.vpf
パラメーター:
このスクリプトは次の仕事をするはずです:
dir | %{
$id = $_.Name.SubString(0,8);
if(-not (Test-Path $id)) {mkdir $id};
mv $_ "$id\$_";}
説明:
ディレクトリ内のforeachファイル(%はforeachのエイリアスです):
私が提供する例は、ファイルがあるディレクトリから実行していることを前提としていることに注意してください。
あなたはこのようなことをすることができます:
$Directory = "f:\ION\2011291";
$AllFiles = Get-ChildItem $Directory | where {$_.extension -eq ".vpf"};
$FileNames = New-Object System.Collections.ArrayList;
foreach($File in $AllFiles)
{
$FileNames.Add($File.Name.SubString(0,9));
}
$UniqueNames = $FileNames | get-unique;
foreach($Name in $UniqueNames)
{
New-Item $Directory\$Name -type directory
}
foreach($File in $AllFiles)
{
$Dir = $File.Name.SubString(0,9);
Move-Item $Directory\$File $Directory\$Dir\$File;
}
説明:
$Directory
内のすべてのファイルを検索します$FileNames
に追加します$FileNames
から$UniqueNames
にそれぞれの一意の名前を保存します$UniqueNames
の名前で新しいディレクトリを作成しますスクリプトが常にファイルが保存されているディレクトリで実行され、拡張子でフィルタリングしたくない場合は、@ zdansの回答を参照してよりコンパクトでエレガントなソリューションを探してください。