Um ein Batch-Skript mit exiftool.exe in ein Powershell-Skript zu übertragen, stand ich vor der Herausforderung, einerseits '-s, "-s und sogar ${Dateiname} an den Befehl zu übergeben und andererseits Variablen in diesen Parametern auszufüllen.
Für den Anfang: Die Ersetzung durch "Echochars" ist genial. Sie zeigt deutlich, was als einzelner Parameter gruppiert wird und was als nächster Parameter landet.
In Powershell ist es ähnlich wie in Perl (und Unix-Skripting): die verwendeten Anführungszeichen haben ihre Bedeutung.
- Zeichenketten zwischen "-s. Die Zeichenkette wird interpretiert (Variablen werden gefüllt)
- Zeichenketten zwischen '-s. Die Zeichenkette wird nicht (oder nur sehr eingeschränkt) interpretiert
- das Escape-Zeichen ist ` (das Anführungszeichen). Das nächste Zeichen verliert seine besondere Bedeutung. Vergleichbar mit dem \ (Rückwärtsstrich) bei Unix/Linux/Perl.
Einige Beispiele:
${ExifArgs} += "-if `"`${FileName} !~ /desktop.ini/i`""
${ExifArgs} += '-dateFormat "%Y\%Y%m\%Y%m%d_%H%M%S"'
${ExifArgs} += ('"' + "-FileName<${NewFotos}\${SourceName}\" + '${DateTimeOriginal}_${ImageWidth}x${ImageHeight}_${Model;s/ //g}_${FileName;s/^.*([0-9]{4})[^0-9].*$/\1/}.%e' + '"')
Ein Aufruf von echoargs mit dem obigen Befehl ergibt die folgende Ausgabe (die Zahlen sind aus Datenschutzgründen gehackt):
Arg 11 is <-if>
Arg 12 is <${FileName} !~ /desktop.ini/i>
Arg 13 is <-dateFormat>
Arg 14 is <%Y\%Y%m\%Y%m%d_%H%M%S>
Arg 15 is <-FileName<D:\Pictures\NewFotos\${DateTimeOriginal}_${ImageWidth}x${ImageHeight}_${Model;s/ //g}_${FileName;s/^.*([0-9]{4})[^0-9].*$/\1/}.%e>
Sehen Sie, wie die erste Zeile die Argumente 11 und 12 erzeugt: die äußeren "-s werden entfernt, um die gesamte Zeile im Array zu speichern. Die inneren "-s, zitiert durch das `-s, sind dazu da, das Argument zusammenzuhalten (während das -if das vorherige Argument ist)
Die zweite zeigt Argument 13 und 14: die Verwendung von "-s zwischen '-s. Es besteht keine Notwendigkeit, "-s" zu verwenden.
In der letzten Zeile (die arg 15 erzeugt): Die einzelne Zeichenfolge wird mithilfe von powershell ()-s und +-s erstellt, um mehrere Zeichenfolgen zu einer einzigen Zeichenfolge zu verketten. Es werden sowohl durch " als auch durch ' begrenzte Zeichenketten verwendet, damit einige ${}-s von der Powershell und einige für exiftool ausgefüllt werden können. Und ja, einige Sonderzeichen der Powershell werden in die Dokumente übertragen.