[batch-file] Windows .cmd 파일 또는 배치 파일의 경로에 공백이있는 경로 변수 설정

저는 스크립트 작성이 처음이고이 작업을 수행 할 수 없습니다. 공간이없는 경로로 파일을 옮길 수 있지만 가능하면 공간과 함께 작동하고 싶습니다.

.cmd 파일이있는 폴더에 여러 Office 업데이트를 추출하고 싶습니다. 배치 파일을 모든 컴퓨터에서 사용할 수 있도록하기 위해 다른 컴퓨터에서 실행하기 위해 한 곳에서만 변경하면되는 경로 변수를 설정했습니다. 문제는 경로에 공백이 있다는 것입니다. 정의에서 경로를 따옴표로 묶으면 cmd.exe는 파일 이름을 추가하고 전환하기 전에 경로를 따옴표로 묶고 “명령 줄 구문 오류”와 함께 배치가 실패합니다. 따옴표가 없으면 “내부 또는 외부 명령, 작동 가능한 프로그램 또는 배치 파일로 인식되지 않습니다.”와 함께 실패합니다.

테스트를 위해 도움말 스위치를 사용할 수있을 때까지 사용하고 있습니다. 8.3 파일 / 폴더 이름 (예 : My Documents as MyDocu ~ 1)을 사용하여 할 수 있지만 다른 방법으로 할 수 있습니까?



답변

다음과 같이 시도하십시오.

SET MY_PATH=C:\Folder with a space

"%MY_PATH%\MyProgram.exe" /switch1 /switch2


답변

나는 사용한다

set "VAR_NAME=<String With Spaces>"

경로를 업데이트 할 때 :

set "PATH=%UTIL_DIR%;%PATH%"


답변

여기에는 두 가지 옵션이 있습니다. 먼저, 경로를 인용하지 않고 저장하고 나중에 인용 할 수 있습니다.

set MyPath=C:\Program Files\Foo
"%MyPath%\foo with spaces.exe" something

사용할 수있는 또 다른 옵션은 문자열 인용 해제를위한 서브 루틴입니다 (그러나이 경우에는 인용문을 추가하고 제거하고 이점없이 다시 추가하기 때문에 실제로는별로 좋은 생각이 아닙니다).

set MyPath="C:\Program Files\Foo"
call :foo %MyPath%
goto :eof

:foo
"%~1\foo.exe"
goto :eof

%~1인수를 큰 따옴표를 제거합니다. 이것은 따옴표로 묶인 폴더 이름을 전달할 때 유용하지만 이전에 말했듯이이 특별한 경우에는 최선의 생각이 아닙니다. 🙂


답변

이 시도;

  1. 아래와 같이 변수를 만듭니다.

    SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"**
    
  2. 그런 다음 경로를 변수로 바꿉니다. 시작과 끝에 따옴표를 추가하십시오.

    vstest.console.exe "%SolutionDir%\Automation.Specs.dll"
    

답변

.bat 파일을 만들 때 항상 경로를 큰 따옴표로 묶습니다. (화면을 닫지 않도록 PAUSE를 추가했습니다.)

예를 들면 :

"C:\Program Files\PageTech\PCLReader64_131\PCLReader64.exe"
PAUSE


답변

이를 수행하는 적절한 방법은 다음과 같습니다.

@ECHO off
SET MY_PATH=M:\Dir\^
With Spaces\Sub Folder^
\Dir\Folder
:: calls M:\Dir\With Spaces\Sub Folder\Dir\Folder\hello.bat
CALL "%MY_PATH%\hello.bat"
pause


답변

이 문제를 해결하는 가장 쉬운 방법은 폴더 이름을 따옴표로 묶는 것입니다.

(cd\New Folder\...) --> (cd\"New Folder"\...)

이것이 도움이되기를 바랍니다.