Windows 명령 셸에서 별표까지 올바르게 이스케이프하는 방법은 무엇입니까?

Windows 명령 셸에서 별표까지 올바르게 이스케이프하는 방법은 무엇입니까?

다음과 같은 좋은(때로는 상충되는) 조언을 따름으로써 따옴표, 이스케이프 문자, 구분 기호 - Windows CMD - SS64.com또는 이스케이프 문자 – Wikipedia, 섹션 2.6 Windows_Command_Prompt또는 Windows NT 명령 셸, 99% 정도 탈출 문제는 해결했는데, 아직도 마지막 부분에서 어려움을 겪고 있습니다. 내 사용 사례는 pdf 파일을 명령줄 매개 변수로 해독하거나 암호화하기 위한 암호 인수를 지정하는 것이므로 qpdf.exe특수 문자를 예상하고 환영합니다. 가능하다면 좀 더 많이 사용하고 싶습니다.모두공백 문자로만 SPACE(U+0020)를 사용하는 인쇄 가능한 문자입니다.

명령 사이에 인수를 파이핑하거나 배치 파일을 호출하는 등 추가 수준의 간접 참조는 없습니다. 내가 생성해야 하는 것은 Windows 명령줄에 대한 "직접" 명령뿐입니다.

이것이 내가 지금까지 얼마나 멀리 왔는지입니다:

  • 위의 SS64.com 링크에서 언급한 것과는 반대로 COMMA(U+002C), SEMICOLON(U+003B) 및 EQUAL SIGN(U+003D)는 문제가 없습니다(적어도 내 사용 사례에서는).
  • QUOTATION MARKS기존의 (U+0022)를 두 배로 늘리면서 모든 것을 (U+0022)에 넣는 것은 최소한 (U+0025) QUOTATION MARKS에 문제를 남기므로 제대로 작동하지 않습니다 PERCENT SIGN.
  • 또한 캐럿 이스케이프만으로는 모든 것을 다룰 수는 없습니다. 방법을 혼합해야합니다

그래서 지금까지 진행한 방법은 다음과 같습니다.

  1. "로컬" 로만 큰따옴표를 사용 QUOTATION MARK합니다. 즉, U+0022를 U+0022 U+0022 U+0022 U+0022로 바꿉니다.
  2. "로컬"로만 인용합니다 SPACE. 즉, U+0020을 U+0022 U+0020 U+0022로 바꿉니다.
  3. 캐럿 자체를 캐럿 이스케이프합니다. 즉, U+005E를 U+005E U+005E로 바꿉니다.
  4. 캐럿은 (링크된 기사에 나열된 대로) 나머지 특수 문자를 이스케이프합니다. 즉, xin LESS-THAN SIGN(U+003C), GREATER-THAN SIGN(U+003E), AMPERSAND(U+0026), VERTICAL LINE(U+007C), LEFT PARENTHESIS(U+0028), RIGHT PARENTHESIS( U+0029), 의 모든 항목을 xU+005E 로 바꿉니다 x.
  5. 또한 캐럿 이스케이프가 필요한 것 같습니다 PERCENT SIGN. 즉, 모든 U+0025를 U+005E U+0025로 교체해야 합니다.

따라서 다음과 같은 비밀번호를 지정하려면Hello %TEMP%>"&abc, 나는 결국

C:\path\to\qpdf.exe --encrypt Hello" "^%TEMP^%^>""""^&abc someownerpassword 256 -- input.pdf 출력.pdf

이것은 잘 작동합니다. 즉, output.pdf를 열 때 비밀번호 대화 상자 창에 입력해야 하는 비밀번호는 실제로Hello %TEMP%>"&abc

그것을 탈출하려는 나의 모든 시도를 무시하는 (지금까지) 단 하나의 사악한 캐릭터가 있습니다: 바로 ASTERISK(U+0042)입니다! 인용, 이중화, 캐럿 이스케이프(또는 무작위로 시도한 다른 이스케이프 문자)는 작동하지 않습니다. 항상 "glob"을 시도합니다. 어떤 경우에는 glob과 일치하는 파일이 없으면 운이 좋을 수도 있지만 확실히 물어볼 필요가 있습니다.

질문.다음과 같은 원하는 비밀번호를 어떻게 탈출합니까?*.*(U+0042 U+002E U+0042) 글로빙을 방지하시겠습니까?

관련 정보