質問: powershell:ファイル名から最初の文字列を取得し、文字列からディレクトリを作成してから、ファイルを移動します 次のファイル名のフォルダがあります。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 パラメーター: powershellでこれを行う必要があります これをどのように達成するかについての指示をいただければ幸いです。実際のスクリプトに関するガイダンスをさらに読むことができます。
回答: あなたはこのようなことをすることができます:$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; } 説明: まず、拡張子が「.vdf」の$directory内のすべてのファイルを検索します すべてのファイル名の最初の9文字を$filenamesに追加します $filenamesから$uniquenamesにそれぞれの一意の名前を保存します $uniquenamesの名前で新しいディレクトリを作成します 最初の9文字に基づいて、各ファイルを対応するディレクトリに移動します スクリプトが常にファイルが保存されているディレクトリで実行され、拡張子でフィルタリングしたくない場合は、@ zdansの回答を参照してよりコンパクトでエレガントなソリューションを探してください。