[英]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.