2012-02-08 7 views
0

私は250.000個のファイルをすべて1つのディレクトリに持っています。
ファイルはフォーマットファイルをファイル名と一致する新しいディレクトリにバッチコピーする

1a.jpg 
1b.jpg 
1c.jpg 

ですべてです...と番号が1

2a.jpg 
2a.jpg 
2c.jpg 

インクリメントし...というようにされ、その後1f.jpgまで行きます。

ここでは、1で始まるすべてのファイルを、1と呼ばれる新しいディレクトリ、
にコピーし、ディレクトリ2から2で始まるすべてのファイルなどをコピーしたいとします。

誰でもこれを助けることができますか?

答えて

0

ご希望の場合は、この「昔ながらの」.BATバッチファイルを試す可能性があります

@echo off 
setlocal EnableDelayedExpansion 
for %%f in (*.jpg) do (
    set dir=%%~Nf 
    set dir=!dir:~0,-1! 
    if not exist !dir! md !dir! 
    copy %%f !dir! 
) 

コピーし、このバッチファイルディレクトリにどこのファイルが存在し、それを実行します。同じディレクトリに新しいディレクトリが作成されますが、簡単に変更できます。

+0

これは私がしたいのとまったく同じです!どうもありがとう – user1197199

3

グループ最初の文字とすることにより、すべてのファイルが保存先のフォルダに各グループをコピーします。

Get-ChildItem -Filter *.jpg | Group-Object {$_.Name[0]} | Foreach-Object { $_.Group | Copy-Item -Destination "C:\test\$($_.Name)" } 

EDIT:これはより速く実行する必要があります。

Get-ChildItem *.jpg | Copy-Item -Destination { "C:\test\$($_.Name[0])" } 
+0

動作しません。ファイルはどこにあるべきですか? – user1197199

+0

c:\ testはすべての宛先フォルダが存在する場所です。 –

1

は試してみてください。

dir -filter *.jpg | % { Copy-Item -PATH $_ -DESTINATION .\$($_.BaseName.ToCharArray()[0]) } 

このようにして、宛先フォルダが存在しなければなりません!

+0

ディレクトリ1,2,3を作成しましたが、コマンドを実行すると何も起こりません – user1197199

+0

コマンドを実行すると、ソースフォルダにありますか? –

3

あなたが1人のディレクトリ名250,000ファイルN [-F]の.jpgを持っている場合、私はNは1から41667になり、あなたは41667のディレクトリ6つのJPGファイルを持つ各を持っていると思います期待。その場合は、ここに私のソリューションは、もう少し複雑です:

  • まず、それは文字( - F)と先のフォルダを取得するには アイテムのフルネームからの.jpg拡張子を取り除きます。
  • 次に、宛先フォルダが存在するかどうかを確認し、存在しない場合は を作成します。
  • 最後に、アイテムは宛先フォルダにコピーされます。

    Get-ChildItem *.jpg | ForEach-Object { 
    $destination = $_.FullName -replace '[a-f]\.jpg' 
    if (-not (Test-Path -Path $destination -PathType Container)) { 
        $null = New-Item -Path $destination -ItemType directory 
    } 
    Copy-Item -Path $_.FullName -Destination $destination 
    } 
    
関連する問題