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


112

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

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

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


따옴표는 파일 이름이있는 경로를 포함해야하며 명령 줄 매개 변수가 뒤에 와야합니다. 명령 줄이 생성되는 방법에 대한 자세한 내용을 제공 할 수 있습니까? 나는 정의에 경로를 따옴표를 넣으면 정확히 당신이>가 원하든을 의미합니까, 경로 주변에 cmd.exe를 둔다 그들은 파일 이름을 추가하기 전에 스위치
vladhorby

답변:


104

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

SET MY_PATH=C:\Folder with a space

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

그것이 내가 메모장에서 바꾸기를 사용하여 한 일입니다. 감사합니다.
marcerickson 2009

5
도움이되어 기쁩니다. 당신이 당신을 도왔다 고 느끼는 대답을 찬성하고 수락하면 좋을 것입니다.
aphoria 2009

75

나는 사용한다

set "VAR_NAME=<String With Spaces>"

경로를 업데이트 할 때 :

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

3
이것은 받아 들여진 대답이어야합니다. 어떤 이유로 값에 공백이 있고 따옴표가 없으면 if 블록에서 set을 호출하면 작동하지 않습니다.
Kevin

33

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

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인수를 큰 따옴표를 제거합니다. 이것은 따옴표로 묶인 폴더 이름을 전달할 때 유용하지만 이전에 말했듯이이 특별한 경우에는 최선의 생각이 아닙니다. :-)


메모장에서 바꾸기를 사용하는 첫 번째 방법을 사용했습니다. 두 번째는 불필요하게 복잡해 보였습니다. 감사합니다.
marcerickson 2009

2
매개 변수를 가져 오는 배치 파일이 있습니다. 사용 set LALA=%~1은 저에게 효과적이었습니다.
JCH2k

당신이 사용하는 경우 제 2 방법은 perfeclty 작동 subrutines
robe007을

16

이 시도;

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

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

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

8

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

예를 들면 :

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

7

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

@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

5

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

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

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


2

영구 경로를 저장해야하는 경우 (cmd를 다시 시작할 때 경로가 변경되지 않음)

  1. 관리자 권한으로 명령 프롬프트 실행 (cmd.exe를 마우스 오른쪽 버튼으로 클릭하고 관리자 권한으로 실행 선택)

  2. cmd에서 setx path "%path%;your new path" 다음을 입력하십시오.

  3. 경로를 입력하고 Enter 키를 눌러 경로가 올바르게 선택되었는지 확인하십시오.


1
질문은 PATH 변수가 아니라 경로 변수 에 관한 것 입니다. OP는 분명히 특정 경로를 변수에 저장하고 배치 스크립트 전체에서 값을 사용하려고합니다.
Andriy M

1

나에게만 효과가있는 것처럼 이중 슬래시를 추가해보세요.

set dir = "C : \\ 1. 일부 폴더 \\ 다른 폴더 \\ 그냥"

MKDIR % dir %의 @echo

게시 후 OMG는 내 게시물에서 두 번째 \를 제거 했으므로 내 댓글을 열면 3 개가 표시되면 2 개로 읽어야합니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.