以下是整个代码:
$kansio = ($args[0]).replace("'","")
$tiedostot = 0
Get-ChildItem $kansio | foreach {if ($_.Extension -eq ".jpg"){$_.FullName}} |
foreach {
$id = (Start-process mspaint $_ -ea 0 -PassThru).Id
$vikaTallennus = (Get-ChildItem $_).LastWriteTime
[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 $_).LastWriteTime -gt $vikaTallennus)
{
try
{
Stop-Process -Id $id -force -ea 'stop'
Write-Host "Done: $_" -foregroundcolor Green
break
}
catch
{
Write-Host "Failed to close the process" -foregroundcolor DarkRed
Start-Sleep -milliseconds 100
}
}
}
}
}
catch
{
Write-Host "Failed to catch the process" -foregroundcolor DarkRed
Start-Sleep -milliseconds 100
}
} until ((Get-Process -Id $id -ea 0) -eq $null -or $id -eq $null)
$tiedostot++
}
Write-Host "Files saved: $tiedostot" -foregroundcolor Green
如果JPG图片的文件名包含“[
”或“]
”,则PowerShell无法关闭MSPaint。为什么?
有什么变通方法?我可以在这里使用一些文字名吗?
答案 0 :(得分:0)
是的,如果您想使用Get-ChildItem
返回带括号的文件/文件夹(以及其他一些奇怪的字符),则应使用-LiteralPath
参数。 Here's一个体面的写作。
因此,如果您希望文件名中包含此类字符,并且您不需要通配符支持,则相关行应为:
if ((Get-ChildItem -LiteralPath $_).LastWriteTime -gt $vikaTallennus)