2

フォルダーc:\graphics(ルート) と、サブフォルダーを作成するプログラムがあります (例: 、、、) (aa多くのサブフォルダーがあり、長さは可変です) 。bmczxmjpqzz

各サブフォルダーには、26 個のファイルと 1 つのフォルダーがあります。たとえば、aaフォルダには次のものが含まれます: aa_000.jpg, aa_001.jpg, ..., aa_023.jpg; 他の 2 つのファイルaa_360.jpgaa.htmlおよびフォルダー。完全なパスはC:\graphics\aa\aa_360.

サブフォルダー内の24 個のファイル ( aa_000.jpgaa_001.jpg、...、aa_023.jpg)を移動する必要がありc:\graphics\aa\aa_360、各サブフォルダーにも相当します。

もう 1 つの例は、 、 、 ...、c:\graphics\mjpq\mjpq_360を持っている必要があります。mjpq_000.jpgmjpq_023.jpg

.jpgサブフォルダー内のすべて (25 個のファイル) を移動することを考えてスクリプトを開始しました(後で、を抽出するように考える必要がありましたxxx_360.jpg) が、機能しません:

Get-ChildItem c:\graphics -rec | where-object {$_.extension -match "jpg"} | ForEach-object {$newPath =(Get-Location).toString()+(Get-Location).ToString().SubString(10)+"_360"); Move-Item $_.FullName $newPath}

しかしGet-Location、ファイルパスが見つかりません。


注:機能しているソリューションを見つけましたが、コンソールにいくつかのエラーがスローされます:

Get-ChildItem c:\graphics -rec | where-object {$_.extension -match "jpg" -and (!($_.name -like "*360*"))} | ForEach-Object {$newPath =($_.DirectoryName).toString()+($_.DirectoryName).ToString().SubString(10)+"_360"; Move-Item $_.FullName $newPath}
4

1 に答える 1

6

これを次のように単純化できると思います。

Get-ChildItem c:\graphics -rec *.jpg | Move-Item -Dest {$_.Directory.FullName + "\" +
    $_.Directory.Name + "_360\" } -WhatIf

-whatif提案された移動操作が正しいと思われる場合は、 を削除します。

于 2013-03-12T02:22:03.500 に答える