QB64는 — 대부분 argv
유사과 argc
C++에서 COMMAND$
및 _COMMANDCOUNT
기능을 제공합니다. 인수가없는 COMMAND$
은 모든 명령 행 args를 포함하는 단일 문자열을 리턴하지만 QB64는 COMMAND$(i)
이 색인 i
에서 인수를 문자열로 검색하도록 허용합니다. QB64 위키에 _COMMANDCOUNT
entry에서 예 :
limit = _COMMANDCOUNT
FOR i = 1 TO limit
PRINT COMMAND$(i)
NEXT
당신은 QB64의 명령 줄 인수를 처리하는 데 사용할 것입니다. 프로그램에 따옴표를 포함하는 명령 줄 인수를 전달하려면 백 슬래시를 사용하여 유지하려는 따옴표를 이스케이프 처리해야 할 수 있습니다.
불행히도 백 슬래시 이스케이프는 완벽하지 않으며 cmd.exe
에서 문제를 일으킬 수 있습니다. 이는 주로 파일 경로에 백 슬래시가 사용되기 때문입니다. 이것을 파일 경로의 공백과 결합하면 악몽 같은 명령 인터프리터가 생깁니다. this answer에서, 당신은 프로그램에 적절한 견적을 전달하는 인용 된 문자열 안에 따옴표를 두 번 : 와인의 cmd.exe
에서
> program.exe hello world
hello
world
> program.exe hello"" world
hello (+ empty quoted string)
world
> program.exe "hello"" world
hello"
world
> program.exe "hello""" world
hello" world
의 ""
은 그래서 즉시 연속 따옴표는, 위와 같이 견적 또한 인용 된 문자열을 닫 탈출 다음에 간격을 둔 항목을 현재 인수로 계속 그룹화해야했습니다. Windows 컴퓨터를 실행하고 있지 않기 때문에 Windows 구현에 대해 확신 할 수 없지만 동일한 문제가 발생한다고 생각됩니다.
즉
, 당신은 통과 """filename"""
때문에 : 당신은 인용 된 문자열의 ^"
외부를 사용할 수 있지만, 예를 들어 "
에서 ""^"
결과로 자신의 문제가
" Open quoted string
"" Escaped double quote, closes quoted string
filename Concatenated at the end of the first quoted string
" Open quoted string, concatenated to filename
"" Escaped double quote, closes quoted string
편집
, """
처럼 ""^"
을 배치 파일에 전달하려면 추가 이스케이프가 ""^^"
이어야합니다. 따라서 ^
을 사용하면 특히 ""
및 """
이 제대로 작동하는 경우에는 사용하지 않는 것이 좋습니다. ^
이스케이프 문자에 대한 정보는 위의 링크 된 대답을 참조하십시오.
또한 백 슬래시와 따옴표가있는 문자열에주의해야합니다.당신이 당신의 프로그램에 단일 인수로 유닉스 계열 인수 'C:/Program Files/"file" name'
의 적절한 윈도우 표현을 전달할 수있는 방법을 생각해
> program.exe "C:\Program Files\\""file\"" name"
C:\Program Files\"file" name
cmd.exe
설명 :이 "C:\Program Files\\"file\" name"
의 명령 줄을 초래
" Open quoted string
C:\Program Files\\ Quoted string contents, including escaped \
"" Escaped double quote, closes quoted string
file\ Unquoted string contents, including C escape char
"" Open quoted string with escaped double quote
[ ]name Quoted string contents
" Close quoted string
프로그램에 전달되면 C:\Program Files\"file" name
의 경로가 생성됩니다. 물론 이러한 경로는 Windows에서는 불가능합니다 (NTFS 파일 시스템에서는 아닐 수도 있습니다). 그러나 그 점을 보여줍니다. cmd.exe
의 인용 규칙과 C 런타임의 인용 규칙 및 백 슬래시 이스케이프 모두를 고려해야합니다 .
좋아요, 인용 부호에서 벗어나기 위해 백 슬래시라고 생각했습니다 .Chrome을 다시 도와 주셔서 감사합니다. – eoredson
배치 파일에서 '^ "를 사용할 수 있지만 대화식 세션에서 ''''(따옴표 붙은 문자열을 따옴표 문자로 시작/끝내기) 또는'' ""'(인용 문자열로 인용 문자열을 끝내고 인용 된 새로운 문자열을 시작하기 위해). 따옴표와 관련하여 여러 가지 탈출 규칙에 관해서. 백 슬래시 이스케이프 및 큰 따옴표와 관련된 몇 가지 사항을 명확히하기 위해 답을 편집했습니다. cmd.exe를 사용할 때는 조심해야합니다. 가능한 경우 다른 명령 인터프리터 인 Bash를 사용하십시오. WSL bash, git-bash 또는 심지어 Cygwin 또는 MSYS의 bash 버전이든 상관 없습니다. –