2

処理する 75000 個のファイルを含むフォルダーAがあります。一度に 3000 個のファイルを処理できる 4 つのフォルダー (A、B、C、D) があります。

A から 3000 個のファイルを取得して B に配置するスクリプトが必要です。次に、別の 3000 個のファイルを取得して C、次に D、最後に E に配置する必要があります。

以下は私がこれまでに持っているコードです。これは10個のファイルを取り、それらをBに移動しますが、C、D、またはEにファイルを配置せずに永遠に座っています.

コードの EnumerateFiles セクションを終了する方法はありますか? 最初に見つけた X ファイルを移動したいだけで、A にあるファイルの数は気にしません。

何か案が?

$dirBase = "\\networkDir\A\"
$dirProc1 = "\\networkDir\B\"
$dirProc2 = "\\networkDir\C\"
$dirProc3 = "\\networkDir\D\"
$dirProc4 = "\\networkDir\E\"

cd $dirBase

$directoryInfo1 = Get-ChildItem $dirProc1 | Measure-Object
$directoryInfo2 = Get-ChildItem $dirProc2 | Measure-Object
$directoryInfo3 = Get-ChildItem $dirProc3 | Measure-Object
$directoryInfo4 = Get-ChildItem $dirProc4 | Measure-Object

if ($directoryInfo1.count -eq 0) {
    MoveFiles $dirBase $dirProc1
} 
if ($directoryInfo2.count -eq 0) {
    MoveFiles $dirBase $dirProc2
} 
if ($directoryInfo3.count -eq 0) {
    MoveFiles $dirBase $dirProc3
} 
if ($directoryInfo4.count -eq 0) {
    MoveFiles $dirBase $dirProc4
} 

function MoveFiles([string]$srcDir, [string]$dest)
{
    $FileLimit = 10    
    $Counter = 0

    [IO.Directory]::EnumerateFiles($srcDir) | Where-Object {$Counter -lt $FileLimit} | %{ 
    #Get-ChildItem $srcDir | Select-Object -first $FileLimit | %{ 

        Move-Item $_ -destination $dest
        $Counter++

    }
}
4

1 に答える 1

1
Get-ChildItem $dirProc1 | select -first 3000 

?

于 2012-11-22T18:25:30.687 に答える