Wie kann ich in der Windows-Eingabeaufforderung richtig entkommen – auch mit dem Sternchen?

Wie kann ich in der Windows-Eingabeaufforderung richtig entkommen – auch mit dem Sternchen?

Durch Befolgen guter (wenn auch manchmal widersprüchlicher) Ratschläge wie Anführungszeichen, Escape-Zeichen, Trennzeichen - Windows CMD - SS64.comoder Escape-Zeichen – Wikipedia, Abschnitt 2.6 Windows_Command_Promptoder auch Die Windows NT-Eingabeaufforderung, ich habe das Problem des Escapens zu etwa 99 % gelöst, aber mit dem letzten Teil kämpfe ich immer noch. Mein Anwendungsfall ist die Angabe der Passwortargumente zum Entschlüsseln oder Verschlüsseln von PDF-Dateien als Befehlszeilenparameter an qpdf.exe, daher sind Sonderzeichen zu erwarten und willkommen. Wenn möglich, würde ich gerne mehr oder weniger verwenden könnenalledruckbare Zeichen, mit dem Leerzeichen (U+0020) als einzigem Leerzeichen.

Es gibt keine zusätzliche Indirektionsebene, wie etwa das Weiterleiten der Argumente zwischen Befehlen oder das Aufrufen einer Batchdatei. Alles, was ich erzeugen muss, ist der „direkte“ Befehl für die Windows-Befehlszeile.

So weit bin ich bisher gekommen:

  • Im Gegensatz zu dem, was im obigen SS64.com-Link erwähnt wird, stellen COMMA(U+002C), SEMICOLON(U+003B) und EQUAL SIGN(U+003D) kein Problem dar (zumindest für meinen Anwendungsfall).
  • Einfach alles in QUOTATION MARKS(U+0022) einzufügen und dabei das bereits vorhandene QUOTATION MARKS(U+0022) zu verdoppeln, funktioniert nicht richtig, da es zumindest mit PERCENT SIGN(U+0025) zu Problemen kommt.
  • Auch das alleinige Verwenden von Cursor-Escapes deckt nicht alles ab. Man muss die Methoden mischen

So gehe ich bisher vor:

  1. Setzen Sie nur "lokal" doppelte Anführungszeichen QUOTATION MARK, d. h. ersetzen Sie jedes U+0022 durch U+0022 U+0022 U+0022 U+0022
  2. Zitieren Sie alle SPACEnur "lokal", d. h. ersetzen Sie U+0020 durch U+0022 U+0020 U+0022
  3. Cursor-Escape für den Cursor selbst, d. h. ersetzen Sie U+005E durch U+005E U+005E
  4. Mit dem Caret-Zeichen werden die verbleibenden Sonderzeichen (wie in den verknüpften Artikeln aufgeführt) maskiert, d. h. xin LESS-THAN SIGN(U+003C), GREATER-THAN SIGN(U+003E), AMPERSAND(U+0026), VERTICAL LINE(U+007C), ( LEFT PARENTHESISU+0028), RIGHT PARENTHESIS(U+0029) wird jedes Vorkommen von xdurch U+005E ersetzt x.
  5. Darüber hinaus scheint es notwendig zu sein, das mit einem Caretzeichen zu maskieren PERCENT SIGN, d. h. jedes U+0025 durch U+005E U+0025 zu ersetzen.

Geben Sie daher ein Passwort wieHello %TEMP%>"&abc, ich würde am Ende haben

C:\Pfad\zu\qpdf.exe --encrypt Hallo" "^%TEMP^%^>""""^&abc someownerpassword 256 -- Eingabe.pdf Ausgabe.pdf

Das funktioniert einwandfrei, d.h. das Passwort, das ich beim Öffnen von output.pdf im Passwort-Dialogfenster eingeben muss, ist tatsächlichHello %TEMP%>"&abc

Es gibt nur ein (bisher) böses Zeichen, das sich all meinen Versuchen, ihm zu entkommen, widersetzt: ASTERISK(U+0042)! Keine Anführungszeichen, Verdoppelungen, Caret-Escapes (oder andere Escape-Zeichen, die ich zufällig ausprobiert habe) funktionieren dagegen – es wird immer versuchen, einen „Glob“ zu verwenden. In manchen Fällen kann man Glück haben, wenn keine Dateien mit dem Glob übereinstimmen, aber ich muss definitiv einen … fragen.

Frage.Wie kann ich ein gewünschtes Passwort umgehen, wie z. B.*.*(U+0042 U+002E U+0042) und verhindern, dass es globuliert wird?

verwandte Informationen