Новый путь к преобразованному типу файла в PowerShell - PullRequest
1 голос
/ 07 апреля 2020

Я пытаюсь преобразовать файлы .TIF в .PNG с помощью PowerShell. Сценарий успешно преобразовал файл и сохранил файл в той же папке / пути. Я хотел бы, чтобы скрипт сохранил вновь созданный файл в новом месте. Я определил путь назначения, но я не уверен, где я могу добавить выражение, чтобы сохранить его в этом пути назначения.

Я впервые пишу код, извиняюсь за простое решение.

function ConvertImage{
param ([string]$path)
$_sourcepath="C:\Users\Name\Documents\File_TIFF" #path to source files
$_destinationpath="C:\Users\Name\Documents\File_PNG" #path to destination files
if (Test-Path $_sourcepath)

#Load required assemblies and get object reference
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
foreach($file in (ls "$_sourcepath\*.TIF")){
    $convertfile = new-object System.Drawing.Bitmap($file.Fullname)
    $newfilname = ($file.Fullname -replace '([^.]).TIF','$1') + ".PNG"
    $convertfile.Save($newfilname, "PNG") 
    $file.Fullname
    }  
 }
else
 {
Write-Host "Path not found."
 }
};ConvertImage -path $args[0]

1 Ответ

1 голос
/ 08 апреля 2020

$newfilname = ($file.Fullname -replace '([^.]).TIF','$1') + ".PNG"

должно быть:

$newfilname = $_destinationpath + '\' + $file.BaseName + '.PNG'

Несколько сторон:

  • Вы проходите путь к параметру -path вашей функции ($path), но вы его не используете.

  • Re [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null:

    • It проще и больше PowerShell-idiomati c использовать
      Add-Type -AssemblyName System.Windows.Forms
  • Re new-object System.Drawing.Bitmap($file.Fullname):

    • Лучше всего избегайте такого синтаксиса псевдо-метода: вместо New-Object SomeType(arg1, ...) используйте New-Object SomeType [-ArgumentList] arg1, ... - командлеты и функции PowerShell вызываются как команды оболочки , а не как методы . То есть без круглых скобок вокруг списка аргументов и пробелов разделенных аргументов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...