如果for循环中的语句没有在循环上执行

时间:2016-10-26 20:02:21

标签: if-statement for-loop powershell-v2.0

我已经尝试了好几天,并且无法掌握这里的逻辑。扔在毛巾里。

我有一个图片对象,我把它切成10" x 8"等格的网格。在第10列之后,它假设下降到下一行并收集随后的10列,依此类推。我似乎无法将它递归到下一行并保持在那一行,而是,它获得一个单元格并恢复到第一行。

        $startColumn = 1
        $currentCell = 1
        $currentColumn = 1
        $currentRow = 1

        For($i = 1; $i -lt 81; $i++) 
        {
            $startleftCoord = 292
            $starttopCoord = 87
            $startrightCoord = 390
            $startbottomCoord = 162
            $cellheight = 75
            $cellwidth = 98



                if ($firstiterationcomplete -eq 1) {


                 "Changing columns"
                 $startleftCoord = $startleftCoord+($currentColumn*$cellwidth)+(4.05*$currentColumn)
                 $startrightCoord = $startrightCoord+($currentColumn*$cellwidth)+(4.05*$currentColumn)


                    if ($currentColumn -eq 9) {
                        "Changing Rows"                    
                        $currentRow++
                        $currentColumn = $startColumn

                        $startleftCoord = $startleftCoord
                        $startrightCoord = $startrightCoord
                        $starttopCoord = $starttopCoord+($currentRow*$cellheight)+(4.25*$currentRow)
                        $startbottomCoord = $startbottomCoord+($currentRow*$cellheight)+(4.25*$currentRow)
                     }
                }


            "Curent column is " + $currentColumn
            "Row count is " + $currentRow

            #save cellshot
            $cellBounds = [Drawing.Rectangle]::FromLTRB($startleftCoord,$starttopCoord, $startrightCoord, $startbottomCoord)
            $cellObject = New-Object Drawing.Bitmap $cellBounds.Width, $cellBounds.Height
            $cellGraphics = [Drawing.Graphics]::FromImage($cellObject)
            $cellGraphics.CopyFromScreen( $cellBounds.Location, [Drawing.Point]::Empty, $cellBounds.Size)
            $cellGraphics.Dispose()      
            $cellObject.Save($FilePath)

            $currentColumn++
            $currentCell++
            $firstiterationcomplete = 1
            "Saved CELLSHOT to $FilePath."
       }

1 个答案:

答案 0 :(得分:0)

我已多次重写我的IF块。我只是错过了一个简单的解释,为什么以下是跳过第2列。“

Starting to loop image for each ball"


[int]$startCell = 1
[int]$startRow = 1
[int]$startColumn = 1
[int]$totalLoops = 81


[int]$startleftCoord = 293
[int]$starttopCoord = 90
[int]$startrightCoord = 385
[int]$startbottomCoord = 160
[int]$cellheight = 75
[int]$cellwidth = 100



    Do 
    {         


        #get the current time and build the filename from it
        $Time = (Get-Date)

        [string] $FileName += "-cellshot"
        $FileName = "$($Time.Month)"

        $FileName += '-'
        $FileName += "$($Time.Day)" 
        $FileName += '-'
        $FileName += "$($Time.Year)"
        $FileName += '-'
        $FileName += "$($Time.Hour)"
        $FileName += '-'
        $FileName += "$($Time.Minute)"
        $FileName += '-'
        $FileName += "$($Time.Second)"
        $FileName += '-'
        $FileName += "$($Time.Millisecond)"
        $FileName += '-'
        $FileName += [string]$currentCell

        $FileName += '.png'

        #use join-path to add path to filename
        [string] $FilePath = (Join-Path $Path $FileName)



        if (!$currentCell -OR !$currentColumn -OR !$currentRow){
            "Initializing Globals"

            $currentCell = $startCell
            $currentColumn = $startColumn
            $currentRow = $startRow

        }  


       "Designate capture point"

       if ($currentColumn -gt 1 -AND $currentColumn -lt 11) {

            "Calculating side coordinates offset"
            $newleftCoord = $startleftCoord+($currentColumn*$cellwidth)
            $newrightCoord = $startrightCoord+($currentColumn*$cellwidth)

        } elseif ($currentColumn -eq 11) {

            "Resetting column coordinates "
            $currentColumn = $startColumn
            $newleftCoord = $startleftCoord
            $newrightCoord = $startrightCoord

            "Compensating for multiple rows offest"
            $newtopCoord = $starttopCoord+($currentRow*$cellheight)
            $newbottomCoord = $startbottomCoord+($currentRow*$cellheight)
            $currentRow++


        }else{
           "Getting number one"
            $newleftCoord = $startleftCoord
            $newtopCoord = $starttopCoord
            $newrightCoord = $startrightCoord
            $newbottomCoord = $startbottomCoord
        }



        "Current Column is " + $currentColumn
        "Current row is " + $currentRow
        "Current cell is " + $currentCell


        #save cellshot
        $cellBounds = [Drawing.Rectangle]::FromLTRB($newleftCoord,$newtopCoord, $newrightCoord, $newbottomCoord)
        $cellObject = New-Object Drawing.Bitmap $cellBounds.Width, $cellBounds.Height
        $cellGraphics = [Drawing.Graphics]::FromImage($cellObject)
        $cellGraphics.CopyFromScreen( $cellBounds.Location, [Drawing.Point]::Empty, $cellBounds.Size)
        $cellGraphics.Dispose()      
        $cellObject.Save($FilePath)





        $currentColumn++
        $currentCell++


    }Until ($currentCell -eq $totalLoops)
Start-Sleep -Second 20
}




        #load required assembly
        Add-Type -Assembly System.Windows.Forms   

        Start-Sleep -Seconds 5       

        $ballarray = @{}

        Do {



            #run screenshot function
           # If ($ballarray.count -eq 20){
           #    GenScreenshot
           #     "Snapped screenshot - $Filename ."
           # }else{
                Do{

                GetNewBall
                }Until($currentCell -eq 80)
            #}


            #$bounds = [Drawing.Rectangle]::FromLTRB(307,129, 1060, 668)
            #screenshot $bounds $Filepath

            #Start-Sleep -Second 10
        }Until($ballarray.count -eq 20)`