배치 스크립트-명령 및 usebackq에 공백이있는 FOR / F 사용

Midhun Agnihotram

배치 스크립팅이 처음입니다. 변수에 할당 할 명령의 출력이 필요합니다. FOR / F 명령에 대해 알게되었습니다. 내 명령에는 공백과 큰 따옴표가 있습니다. 그래서 usebackq 옵션을 사용해 보았습니다. 그러나 공간상의 오류로 실패합니다.

for /F "usebackq delims=" %%G IN (`"C:\Program Files (x86)\ABC\DEF\XYZ.exe" Get /a "P1=D2" /b "Q1=D3" /c "D5"`) DO (
SET var=%%G
)

ECHO %var%

pause

실패 :

'C:\Program' is not recognized as an internal or external command,
operable program or batch file.

StackOverflow에 대한 다른 질문에 따라 나는 모든 것을 올바르게했습니다 -back tick의 usebackq , demlims = 구분 기호로 공백을 무시합니다. 왜 여전히 실패하는지 잘 모르겠습니다. 도움을 주시면 감사하겠습니다!

Mofi

사용중인 내부 '또는 내부 의 명령 줄 FOR의해 각각 실행되며 Windows 명령 프로세스 는 배치 파일을 백그라운드에서 처리  하고 명령 줄은 추가 인수로 추가됩니다.`usebackq/Fcmd.exe%ComSpec% /c

ComSpec시스템 환경 변수 %SystemRoot%\System32\cmd.exe사전 정의 된 Windows 환경 변수입니다.

cmd /?명령 프롬프트 창 에서 실행시 도움말 출력은 옵션 /C(명령 줄 실행 및 닫기) 또는 옵션 /K(명령 줄 실행 및 계속 실행) 후 Windows 명령 프로세서에서 문자열을 해석하는 방법을 설명합니다 .

실행할 명령 줄 자체에를 포함하는 하나 이상의 인수가 포함되어 있지 않기 때문에 역 따옴표를 사용할 필요가 없습니다 '. 따라서 명령 줄을 '.

FOR 에서 실행할 명령 줄 , Windows 명령 인터프리터가 배치 스크립트를 구문 분석하는 방법, 즉 FOR 명령 줄 cmd.exe이 배치를 디버깅 할 때 볼 수있는 배치 파일을 처리하여 구문 분석 및 처리 한 후 어떻게 보이는지 고려해야합니다. 파일 및 명령 줄이 cmd.exe백그라운드에서 실행되는 두 번째 인스턴스에 인수 문자열로 전달되는 방법 .

최소한 다음 두 가지 해결책이 있습니다.

for /F "delims=" %%G in ('^""%ProgramFiles(x86)%\ABC\DEF\XYZ.exe" Get /a "P1=D2" /b "Q1=D3" /c "D5"^"') do set "var=%%G"
for /F "delims=" %%G in ('""C:\Program Files (x86^)\ABC\DEF\XYZ.exe" Get /a "P1^=D2" /b "Q1^=D3" /c "D5""') do set "var=%%G"

첫 번째 솔루션은 Compo 에서 제안했으며 더 쉬운 솔루션 입니다. 전체 명령 라인에 봉입 "cmd.exe처리 및 나머지 명령 라인을 실행하기 전에 배경 제거합니다 시작. "명령 줄의 시작과 끝에 추가 된 것은 인수 문자열의 시작 / 끝이 아닌 리터럴 문자로 해석 될 배치 파일을 처리하기 ^위해 이스케이프 cmd.exe처리됩니다. 따라서 이스케이프 된 두 사이의 인수 문자열 FOR 명령 줄 "cmd.exe처리하여 정상적으로 해석됩니다 .

두 번째 해결책은 이해하기 더 어렵습니다. 백그라운드에서 시작하기 "위해 전체 명령 줄도 포함 cmd.exe되어 있습니다. 그러나 큰 따옴표는 cmd.exe배치 파일 처리하기 위해 이스케이프되지 않으므로이 cmd.exe인스턴스는 이제 명령 줄을 다음 인수 문자열 목록으로 해석합니다.

  1. ""
  2. C:\Program
  3. Files
  4. (x86
  5. )
  6. \ABC\DEF\XYZ.exe
  7. " Get /a "
  8. P1=D2
  9. " /b "
  10. Q1=D3
  11. " /c "
  12. D5
  13. ""

전체 FOR 명령 줄 (x86cmd.exe처리하기 위해 큰 따옴표로 묶인 인수 문자열 외부에 있기 때문에이 경우 닫는 둥근 대괄호 는 리터럴 문자로 해석되지 않습니다 . 따라서 실행할 명령 줄의 끝을 표시 하기 전에 잘못된 위치에 놓인 집합의 끝이 아닌 리터럴 문자로 해석 되도록 이스케이프 처리해야합니다 .^'

두 개의 등호는 모두 cmd.exe배치 파일 처리하기 위해 큰 따옴표로 묶인 인수 문자열 밖에 있습니다. 따라서 cmd.exe인수 구분자로 해석하고 각각 =을 공백 문자로 대체 합니다. 때문에 인수의 여기 원하지 않는 즉로 전달되어야 P1=D2하고 Q1=D3실행을하지로 P1 D2하고 Q1 D3. 따라서 배치 파일 ^cmd.exe처리하여 인수 구분자가 아닌 리터럴 문자로 해석 하려면 두 등호를 모두 이스케이프해야 합니다.

두 솔루션 모두 Windows가 설치된 백그라운드에서 실행 C:\Windows되고 32 비트 프로그램 파일은 C:\Program Files (x86)다음에 실행됩니다 .

C:\Windows\System32\cmd.exe /c ""C:\Program Files (x86)\ABC\DEF\XYZ.exe" Get /a "P1=D2" /b "Q1=D3" /c "D5""

백그라운드 명령 프로세스는 첫 번째와 마지막 "을 제거한 다음 실행합니다.

"C:\Program Files (x86)\ABC\DEF\XYZ.exe" Get /a "P1=D2" /b "Q1=D3" /c "D5"

이 디렉토리에 생성 할 수 있습니다 C:\Program Files (x86)\ABC\DEF배치 파일 XYZ.bat바로 명령 줄을 함유 @echo %0 %*하고 교체 .exe.bat포함하는 배치 파일에 대한의 배치 파일 모두에서 어느 배치 파일에 전달 된 매개 변수와 함께 실행되고 있는지 확인하기 위해 명령 줄을. 이렇게하면 명령 프롬프트 창에서 FOR 명령 줄을 @echo off사용하여 배치 파일을 제거 하고 실행할 때 진행되는 작업을 이해하는 데 도움이됩니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

배치 스크립트에서 공백이있는 경로 사용

분류에서Dev

Windows 명령 줄 및 배치 스크립트에서 파일 이름에 일본어 문자를 사용하려면 어떻게해야합니까?

분류에서Dev

bash 스크립트에서 cp 명령을 사용하여 공백 및 $ 문자가있는 파일을 복사하는 방법은 무엇입니까?

분류에서Dev

bash 스크립트에서 cp 명령을 사용하여 공백 및 $ 문자가있는 파일을 복사하는 방법은 무엇입니까?

분류에서Dev

배치 스크립트에서 Powershell 명령 invoke-sqlcmd를 사용하는 방법

분류에서Dev

wsl 용 배치 스크립트에서 여러 명령 실행

분류에서Dev

스크립트에서 동시에 cut 및 sed 명령 사용

분류에서Dev

AIX에서 설치 스크립트에 스크립트 명령 사용

분류에서Dev

배치 스크립트 : SET / p 명령에서 공백이있는 문자열을 설정할 수 있습니까?

분류에서Dev

명령 줄로 프로젝트에 프로비져닝 프로필 및 인증서를 설치하는 방법 / 셸 스크립트 사용

분류에서Dev

ssh 및 특수 문자가있는 원격 서버에서 sed 명령을 사용하는 bash 스크립트

분류에서Dev

Cisco 스위치 용 Plink 및 배치 파일을 사용하는 여러 명령

분류에서Dev

쉘 스크립트에서 명령으로 사용되는 줄 사이의 공백

분류에서Dev

실행중인 Puppeteer 스크립트에 데이터 및 사용자 명령 보내기

분류에서Dev

자바 스크립트 일치 문자 및 사이에 공백 추가

분류에서Dev

bash 스크립트에서 사용할 수없는 명령

분류에서Dev

텍스트 배치 명령 파일 작성 및 사용 방법

분류에서Dev

배치 스크립트를 사용하여 여러 명령 프롬프트에서 무한 루프 실행

분류에서Dev

명령 프롬프트에서 배치 파일을 사용하여 SQL 스크립트 실행

분류에서Dev

여러 명령이있는 Windows 배치 스크립트

분류에서Dev

번호순으로 복사 명령을 사용하여 파일을 병합하는 배치 스크립트

분류에서Dev

배치 스크립트를 사용하여 명령을 텔넷 창에 전달하는 방법은 무엇입니까?

분류에서Dev

배치 스크립트에서 'FIND'명령을 사용할 때 파일 이름을 인쇄하지 마십시오.

분류에서Dev

배치 스크립트에서 '찾기'명령을 사용하여 파일에 쓰기

분류에서Dev

스크립트 및 명령의 색상 옵션이있는 에코 명령이 다르게 작동 함

분류에서Dev

스크립트 및 명령의 색상 옵션이있는 에코 명령이 다르게 작동 함

분류에서Dev

Git : Azure 웹 사이트 사용자 지정 배포 스크립트에 적용된 커밋에 변경된 사항을 알려주는 명령

분류에서Dev

배치 파일의 문자열 목록에 for 및 if 명령 사용

분류에서Dev

공백이있는 배열 : 스크립트에서 그룹 설치 수행

Related 관련 기사

  1. 1

    배치 스크립트에서 공백이있는 경로 사용

  2. 2

    Windows 명령 줄 및 배치 스크립트에서 파일 이름에 일본어 문자를 사용하려면 어떻게해야합니까?

  3. 3

    bash 스크립트에서 cp 명령을 사용하여 공백 및 $ 문자가있는 파일을 복사하는 방법은 무엇입니까?

  4. 4

    bash 스크립트에서 cp 명령을 사용하여 공백 및 $ 문자가있는 파일을 복사하는 방법은 무엇입니까?

  5. 5

    배치 스크립트에서 Powershell 명령 invoke-sqlcmd를 사용하는 방법

  6. 6

    wsl 용 배치 스크립트에서 여러 명령 실행

  7. 7

    스크립트에서 동시에 cut 및 sed 명령 사용

  8. 8

    AIX에서 설치 스크립트에 스크립트 명령 사용

  9. 9

    배치 스크립트 : SET / p 명령에서 공백이있는 문자열을 설정할 수 있습니까?

  10. 10

    명령 줄로 프로젝트에 프로비져닝 프로필 및 인증서를 설치하는 방법 / 셸 스크립트 사용

  11. 11

    ssh 및 특수 문자가있는 원격 서버에서 sed 명령을 사용하는 bash 스크립트

  12. 12

    Cisco 스위치 용 Plink 및 배치 파일을 사용하는 여러 명령

  13. 13

    쉘 스크립트에서 명령으로 사용되는 줄 사이의 공백

  14. 14

    실행중인 Puppeteer 스크립트에 데이터 및 사용자 명령 보내기

  15. 15

    자바 스크립트 일치 문자 및 사이에 공백 추가

  16. 16

    bash 스크립트에서 사용할 수없는 명령

  17. 17

    텍스트 배치 명령 파일 작성 및 사용 방법

  18. 18

    배치 스크립트를 사용하여 여러 명령 프롬프트에서 무한 루프 실행

  19. 19

    명령 프롬프트에서 배치 파일을 사용하여 SQL 스크립트 실행

  20. 20

    여러 명령이있는 Windows 배치 스크립트

  21. 21

    번호순으로 복사 명령을 사용하여 파일을 병합하는 배치 스크립트

  22. 22

    배치 스크립트를 사용하여 명령을 텔넷 창에 전달하는 방법은 무엇입니까?

  23. 23

    배치 스크립트에서 'FIND'명령을 사용할 때 파일 이름을 인쇄하지 마십시오.

  24. 24

    배치 스크립트에서 '찾기'명령을 사용하여 파일에 쓰기

  25. 25

    스크립트 및 명령의 색상 옵션이있는 에코 명령이 다르게 작동 함

  26. 26

    스크립트 및 명령의 색상 옵션이있는 에코 명령이 다르게 작동 함

  27. 27

    Git : Azure 웹 사이트 사용자 지정 배포 스크립트에 적용된 커밋에 변경된 사항을 알려주는 명령

  28. 28

    배치 파일의 문자열 목록에 for 및 if 명령 사용

  29. 29

    공백이있는 배열 : 스크립트에서 그룹 설치 수행

뜨겁다태그

보관