1

ここに、mspaintのフォルダー内のすべてのjpgファイルを開いて保存するPowerShellスクリプトがあります。exifサムを修復し、ファイルサイズを小さくします。

問題は、パスにスペースが含まれているmspaintjpgファイルを送信できないことです。では、どのようにスタートプロセスを作成してjpgファイルの文字通りのパスを取得するのですか?

$kansio = ($args[0]).replace("'","")
$tiedostot = 0
Write-Host "Folder to process: $kansio" -foregroundcolor White

Get-ChildItem -LiteralPath $kansio | foreach{if($_.Extension -eq ".jpg"){$_.FullName}} |
foreach{
    $id = (Start-process mspaint $_ -ea 0 -PassThru).Id
    $vikaTallennus = (Get-ChildItem -LiteralPath $_).LastWriteTime
    [bool]$onnistui = 0

    [void][System.Reflection.Assembly]::LoadWithPartialName("'Microsoft.VisualBasic")
    [void][System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")

    do
    {
        try
        {
            if((Get-Process -Id $id -ea 'stop').WaitForInputIdle())
            {
                [Microsoft.VisualBasic.Interaction]::AppActivate($id)
                [System.Windows.Forms.SendKeys]::SendWait("^s")
                [System.Windows.Forms.SendKeys]::SendWait("{esc}")
                for($i=1; $i -le 10; $i++)
                {
                    if((Get-ChildItem -LiteralPath $_).LastWriteTime -gt $vikaTallennus)
                    {
                        try
                        {
                            Stop-Process -Id $id -force -ea 'stop'
                            Write-Host "Done: $_" -foregroundcolor Green
                            $onnistui = 1
                            break
                        }
                        catch
                        {
                            #Write-Host "Failed to close the process" -foregroundcolor Red
                            #Start-Sleep -milliseconds 100
                        }
                    }
                }
            }
        }
        catch
        {
            #Write-Host "Failed to catch the process" -foregroundcolor Red
            #Start-Sleep -milliseconds 100
        }
    }
    until((Get-Process -Id $id -ea 0) -eq $null -or $id -eq $null)
    if($onnistui){$tiedostot++}else{Write-Host "Failed: $_" -foregroundcolor Red}
}
Write-Host "Files saved: $tiedostot" -foregroundcolor Green
4

1 に答える 1

1

ファイルの引数を引用符で囲む必要があります。そうしないと、mspaintは、スペースで区切られた3つの引数を指定しようとしていると見なします。これを試して:

Get-ChildItem -LiteralPath $kansio -filter "*.jpg" | foreach{
    $file = $_.fullname
    $id = (Start-process mspaint """$file""" -ea 0 -PassThru).Id
于 2012-12-02T13:07:43.337 に答える