Powershell Сохранить файл в исходной папке при повторном просмотре через папки - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь использовать скрипт Powershell, который я нашел здесь, для преобразования файлов PDF в файлы TIFF.У меня работает большинство сценариев, но я не могу понять, как сохранить файлы TIFF в исходной папке, в которой находился файл PDF.

#Path to your Ghostscript EXE
$tool = 'C:\Program Files\gs\gs9.25\bin\gswin64c.exe'

#Directory containing the PDF files that will be converted
$inputDir = 'C:\Temp\Test_ED_Data\1\'

#Output path where converted PDF files will be stored
$outputDirPDF = 'C:\Temp\PDF_Out\'

#Output path where the TIFF files will be saved
$outputDir = $inputDir

$pdfs = get-childitem $inputDir -recurse | where {$_.Extension -match "pdf"}

foreach($pdf in $pdfs)
{
    $tif = $outputDir + $pdf.BaseName + ".tiff"
    if(test-path $tif)
    {
        "tif file already exists " + $tif
    }
    else        
    {   
        'Processing ' + $pdf.Name        
        $param = "-sOutputFile=$tif"
        & $tool -q -dNOPAUSE -sDEVICE=tiffg4 $param -r300 $pdf.FullName -c quit
    }
    Move-Item $pdf $outputDirPDF
}

После запуска сценария всеPDF-файлы отображаются в исходном входном каталоге, а не в каких-либо подкаталогах.

Так, например, если в C: \ Temp \ Test_ED_Data \ 1 \ есть 1 PDF-файл, он преобразуется в TIFF и сохраняется в C: \ Temp \ Test_ED_Data \ 1 \, но любые файлы PDF в подкаталоге, например C: \ Temp \ Test_ED_Data \ 1 \ Progress \, также сохраняются в исходном подкаталоге C: \ Temp \ Test_ED_Data \ 1.

Как мне получить этот скрипт, чтобы убедиться, что преобразованные файлы сохраняются в каталоге, из которого они получены?Кажется, что Powershell не помнит рекурсивный путь, когда он ссылается на раздел $outputDir = $inputDir.Что мне нужно сделать, чтобы исправить это?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Все, что вам нужно сделать, это заменить эту строку:

$tif = $outputDir + $pdf.BaseName + ".tiff"

на это:

$tif = $pdf.FullName -Replace $pdf.Extension,".tiff"
0 голосов
/ 02 октября 2018

Итак, быстрый взгляд на сценарии показывает

$outputDir = $inputDir

Но также

$pdfs = get-childitem $inputDir -recurse | where {$_.Extension -match "pdf"}

Это в основном означает поиск всех файлов с расширением PDF в $ inputDir и поиск всех других папок внутри$ inputDir.Но где вы сохраняете статическое расположение $ inputDir

Дайте этому шанс

function CovertPDF-TIFF($InputDirectory, $OutputPDFLocation){     
    $tool = 'C:\Program Files\gs\gs9.25\bin\gswin64c.exe'
    get-childitem $InputDirectory -include "*.pdf" -recurse | %{
        $tiff = "$($_.Directory)\$($_.BaseName).tiff"
        if(test-path $tiff)
        {
            "tiff file already exists " + $tiff
        }
        else        
        {   
            'Processing ' + $_.Name        
            $param = "-sOutputFile=$tiff"
            & $tool -q -dNOPAUSE -sDEVICE=tiffg4 $param -r300 $_.FullName -c quit
        }
        Move-Item $pdf $OutputPDFLocation
    }
}

CovertPDF-TIFF -InputDirectory C:\Temp\Test_ED_Data\1\ -OutputPDFLocation C:\Temp\PDF_Out\

То, что здесь происходит, это трубопровод.В основном, в конвейере вы берете выходные данные и передаете их другой команде, символ для трубы - | .

В Get-ChildItem мы получим -включите все файлы, которые заканчиваются на *. pdf

We Pipe | каждый элемент в foreach-объект , также известный как % Там мы создаем переменную $ Tiff , чтобы хранить, где и как назвать tiff на основе найденного нами PDF-файла.В канале $ _ - это переменная для информации, которая была передана по конвейеру (в данном случае это информация о дочернем элементе, то есть информация о файле PDF).В powershell $ () позволяет добавлять отдельные команды в строку или другую команду, называемую выражением, ее собственное имя - Sub Expression .Таким образом, $ Tiff содержит строку каталога дочерних элементов, затем добавляет имя файла дочерних элементов и затем добавляет .tiff в конец.Затем он проверяет наличие элемента с помощью команды Test-Path .Если это так, то он возвращает сообщение.Если это не так, он создает параметры и запускает исполняемый файл gswin64c.exe.В одном из параметров вы увидите -sOutputFile = $ tiff Здесь мы определяем, где будет сохранен новый файл Tiff.Наконец, переместите файл PDF в новое место с помощью Move-Item

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...