无法删除脚本中的文件

时间:2012-11-13 23:18:16

标签: file powershell file-io delete-file

离开我的脑海。 我有一个脚本,我正在解析一个充满tif的文件夹,并将文件分成子文件夹,将每个文件夹的页数限制在60左右。如果文档非常大,则会获得自己的文件夹。

问题是该进程正在锁定文件,因此无法删除它们。虽然不是每个文件,但大多数都可以正常工作,并且我的脚本清理部分会删除其他所有文件。

我为我的代码写了很多解决方法来修复这个问题,现在看起来非常糟糕

    #Large Documents
Get-ChildItem -Path "$directory" -recurse -filter "*.tif" | foreach {
    $file = [System.Drawing.Bitmap]::FromFile($_.Fullname);
    $pagecount = $file.GetFrameCount($file.FrameDimensionsList[0]); 
    if ($pagecount -gt $MaxSize){
        $total = $total + $pagecount;
        $name = $_.Basename;
        New-Item $name -ItemType directory;
        Copy-Item $_.fullname -Destination $name;
        #Copy-Item $name".DS" -Destination $processingDir;
        Write-Host "Sleeping in large doc loop";
        $file.Dispose;
        Write-Host "Dispose file object";
        Write-Host $_.Fullname
        $storename = $_.Fullname
        $largeFiles = $largeFiles + $storename      
        Write-Host "Storing to array: " $largeFiles[$index];
        $index = $index + 1;
        sleep(15);
    }
}
while ($delInd -lt $largeFiles.Count){
    Write-Host "Deleting: " $largeFiles[$delInd];
    Remove-Item $largeFiles[$delInd] -Force;
    $delInd = $delInd + 1;
}

我对此感到非常困惑。任何帮助是极大的赞赏。

1 个答案:

答案 0 :(得分:2)

据我所知$file.Dispose,您不强制底层对象关闭文件。 Dispose是一种方法,在PowerShell中(如在C#中),要调用必须使用()的方法。所以试试$file.Dispose()

建议:你可以在行尾

避免;