简体   繁体   English

如何在PowerShell中将文字路径传递给Start-process?

[英]How do I pass literal path to Start-process in PowerShell?

Here I have a PowerShell script which opens all jpg files in a folder in mspaint to save them. 在这里,我有一个PowerShell脚本,可以在mspaint的文件夹中打开所有jpg文件以保存它们。 It repairs exif thumbs and lessens file size. 它可以修复exif拇指并减小文件大小。

The problem is that it can't send mspaint jpg files which have spaces in their paths. 问题在于它无法发送路径中带有空格的mspaint jpg文件。 So how do I make Start-process to get the literal path of the jpg files? 那么,如何使启动进程获取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

You will need to wrap your file argument in quotation marks else mspaint will think you're trying to supply 3 arguments separated by a space. 您需要将文件参数用引号引起来,否则mspaint会认为您试图提供3个参数,并用空格分隔。 Try this: 尝试这个:

Get-ChildItem -LiteralPath $kansio -filter "*.jpg" | foreach{
    $file = $_.fullname
    $id = (Start-process mspaint """$file""" -ea 0 -PassThru).Id

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 PowerShell:Start-Process Firefox,他怎么知道路径? - PowerShell: Start-Process Firefox, how do he know the path? “ Powershell启动过程-ArgumentList”中的文字引号 - Literal quotes in “Powershell Start-Process -ArgumentList” 如何将“y”传递给使用 PowerShell Start-Process 启动的 pscp 进程? - How to pass "y" to pscp process started with PowerShell Start-Process? 如何在 Powershell 的 Start-Process 中将数组传递给 arguments? - How to pass an array to the arguments in Start-Process in Powershell? 如何将 If 语句传递给 PowerShell 的启动进程的参数列表? - How to pass an If statement to the Argumentlist of Start-process for PowerShell? 如何通过启动进程 powershell 传递 python 参数 - How to pass python arguments via start-process powershell 在Powershell中,如何将数组作为参数传递,该数组是Start-Process -ArgumentList的多个参数之一 - In Powershell how can I pass an array as an argument, which is one of multiple arguments to Start-Process -ArgumentList PowerShell启动过程 - PowerShell Start-Process Powershell启动过程,用于启动Powershell会话并传递局部变量 - Powershell Start-Process to start Powershell session and pass local variables 如何使PowerShell运行原始的Start-Process cmdlet而不是PSCX Start-Process cmdlet? - How can I make PowerShell run the original Start-Process cmdlet rather than the PSCX Start-Process cmdlet?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM