Parameter komfortabel an Programm (Ghostscript) übergeben

DukNukem

Lt. Commander
Registriert
Feb. 2009
Beiträge
1.025
Guten Tag,

ich muss mich heute auch einmal mit einem geschäftlichen Problem / Weiterbildungsfrage an euch wenden.

Die Aufgabe ist es Postscript Dateien in PDF Dateien umzuwandeln.

Früher wurde das mit dem Adobe Distiller durchgeführt. Danach wurde von Adobe auf den Foxit Phantom umgestellt, der die Funktion nicht bietet.
Als ersatz wurde uns dafür dann Ghostscript zur Verfügung gestellt.
Unser IT Manager hat uns dafür dann auch eine "GUI" drum herum gebastelt. Das funktioniert, ist aber nicht als "Schick" zu bezeichnen. Anpassungen sind zwar von ihm machbar, aber insgesamt ist es schwierig. Lassen wir es mal dabei.

Als kleine Aufgabe / Weiterbildung habe ich mir unter Windows 7 ein VBS Script geschrieben, dass mir mit Ghostscript die PDFs erzeugt hat.
Die Adressen der PS Datien habe ich über "Send To" an das Script geschickt. Dann entsprechend die Args ausgewertet und jedesmal gswin mit der "Latte" an Argumenten ausgeführt.
Das hat gut funktioniert, da die PDFs im Ordner der PS Dateien abgelegt wurden.

Durch die Umstellung auf Windows 10 kann ich das VBS Skript nicht mehr verwenden.
Mein Plan war es das Skript mit Powershell neu zu erstellen.
Das konnte ich bis auf einen Fall lauffähig bekommen.

Mein Problem ist nun, wenn ich dem Skript via "Send To" eine Datei übergebe, die Leerzeichen im Pfad hat, dann wird am leerzeichen Getrennt und somit erhalte ich für Args mehrere Einträge und keine Korrekte Adresse.
Mit VBS konnte ich das Problem noch einmal nachstellen und dort wird am leerzeichen nicht getrennt.

Meine Frage an euch ist jetzt, habt ihr für das Leerzeichen + Args Problem bei Powershell eine Lösung, die ich noch nicht finden konnte?
Alternativ:
Habe ich eine Falsche herangehensweise?
Was wäre euer Vorschlag um das Problem anzugehen?
Muss ich da doch auf eine höhere Programmiersprache wechseln oder gibt es noch ein Bordmittel, das ich ausprobieren kann?

Das am Schluss ausgeführte Kommando sieht so aus:
Code:
D:\Ghostscript\gswin64.exe -dBATCH -dNOPAUSE -dNOOUTERSAVE -sDEVICE=pdfwrite -sPAPERSIZE=a4 -sOutputFile="D:\Test\Dokument.pdf" "D:\Test\Dokument.ps"

Vielen Dank für die Hilfe und "Weiterbildungsansätze".

Gruß
DukNukem
 
Anhand Deiner Beschreibung würde ich sagen, Du greifst den übergebenen Pfad in Deinem Powershell Skript falsch ab.
Bzw. der Pfad wird "falsch" übergeben
 
Vielen Dank für die Hilfe, bzw die Fragen. Das hat mich schon zum Erfolg geführt.
Erst einmal das Einfache Skript um nur die Übergabe zu testen:
PowerShell:
foreach ($i in $Args){
    Write-Host $i
    Write-Host "Neue Zeile"
}

Amüsanterweise konnte ich die Seite, die beschreibt wie ich das Skript über eine Verknüpfung starte nicht mehr finden und habe eine andere Anleitung gefunden mit der es jetzt funktioniert.

Variante des Aufruf mit Trennung bei Leerzeichen im Pfad:
https://www.datenteiler.de/powershell-skript-mit-doppelklick-ausfuehren/
Code:
powershell.exe -noexit &'<Pfad>\<skriptname>.ps1'

Funktionierende Variante:
https://www.tech-faq.net/powershell-skript-ausfuehren/
Code:
powershell.exe -noexit -File "<Pfad>\<skriptname>.ps1"

Das mal als verkürzte Variante.

Das Skript starte ich dann, indem ich entweder die Dateien auf die Verknüpfung ziehe oder die Verknüpfung in "Send To" ablege und dann über "Senden an" die Dateien übergebe.

Mit der zweiten Variante funktioniert es nun auch mit einem Pfad (oder Dateinamen) mit Leerzeichen.

Somit war es wirklich ein Fehler im Aufruf des Skripts. Da die Variante auch schon ein paar Tage ungenutzt rumliegt kann ich jetzt leider nicht mehr nachvollziehen, warum ich die Varinte gewählt habe und nicht mehrere Seiten angeschaut habe. Ich hatte wohl Glück, dass meine Ordnerstruktur zuerst keine Leerzeichen hatte.

Hätte ich das mit der Verknüpfung im ersten Post ausführlicher beschrieben, dann hätte es sich vielleicht sogar schon direkt gelöst.

Da der Thread aber nun existiert freue ich mich über weitere Hinweise oder auch alternativen, wie ich das anders hinbekomme.
Weiterbildung ist immer gut.

Danke!
 
Zurück
Oben