따옴표를 사용하지 않고 Windows의 명령 행에서 공백을 이스케이프 처리하려면 어떻게합니까?


87

예를 들어 따옴표없이이 명령의 대안은 무엇입니까?

CD "c:\Documents and Settings"

따옴표를 사용하지 않으려는 가장 큰 이유는이 명령이 작동하기 때문입니다.

   SVN add mypathname\*.*

그러나이 명령은 작동하지 않습니다 :

   SVN add "mypathname\*.*"

문제는 공백이있는 경로의 mypathname을 변경하면 모든 것을 인용해야합니다. 예를 들면 다음과 같습니다.

SVN add "c:\Documents and Settings\username\svn\*.*"

그러나 이것을 시도하면 다음과 같은 오류 메시지가 나타납니다.

svn: warning: 'c:\Documents and Settings\username\svn\*.*' not found

2
따옴표를 사용하지 않으려는 이유가 충분하다는 의미입니다.
Thomas

왜 따옴표 키가 깨졌습니까? :)
slhck

3
@slhck 내 Shift 키와 2 번 키가 완벽하게 걱정하지 마십시오! 따옴표 안에 들어있을 때 와일드 카드를 허용하지 않는 명령을 사용하고 있습니다.
David

1
@MarkBooth와 @WeltenWanderer는 시도했지만 불행히도 작동하지 않습니다. 세 경우 모두 "svn : 오류 해결 사례 ....."
David

1
이전 8.3 형식의 이름 (DOCUME ~ 1)을 사용해 보셨습니까?
저스틴 피어스

답변:


54

그것은 거의 모든 나를 위해 작동하지만 아마도 당신은 line5를 시도했을 것입니다. 캐럿 기호로 공간을 탈출 (^)

1 C:\Documents and Settings\user>cd ..

2 C:\Documents and Settings>cd ..

3 C:\>cd Documents and Settings

4 C:\Documents and Settings>cd..

5 C:\>cd Documents^ and^ Settings

6 C:\Documents and Settings>cd..

7 C:\>cd C:\documents and settings

8 C:\Documents and Settings>cd..

9 C:\>

또는 예를 들어 캐럿이 실제로 모든 차이를 만드는 위치는 다음과 같습니다.

캐럿 기호가 답이 될 수있는 것처럼 아래에서 봅니다. 아래 3 행을 참조하십시오.

1 C:\>"c:\Documents and Settings\a.bat"
gaga

2 C:\>c:\Documents and Settings\a.bat
'c:\Documents' is not recognized as an internal or external command,
operable program or batch file.

3 C:\>c:\Documents^ and^ Settings\a.bat
gaga

C:\>

Subversion은 프로그래머의 도구이므로 SO에 적합 할 수 있습니다. 여기에 관련된 질문입니다 stackoverflow.com/questions/757435/... 당신이 아마도 당신이 각각의 공간 전에 백 슬래시를 사용, 그것은 svn을 얻을 따옴표 또는 캐럿을 사용할 수
barlop

궁금한 경우 cygwin의 svn을 시도해 볼 수도 있습니다.이 질문에 대한 몇 가지 예제 답변을 사용하여 그 중 일부 또는 변형이 효과가 있는지 확인하십시오.
barlop

5
캐럿 기호가 내 질문에 직접 응답하므로 귀하의 답변을 수락하겠습니다. 불행히도 SVN 명령은 인식하지 못하는 것 같습니다! 시도하면 "svn 'C :'is not working copy"라는 오류 메시지가 나타납니다. 나는 그 주위에 다른 방법이 있지만 그것은 단순히 디렉토리로 'cd'한 다음 SVN 명령을 한 번 실행하는 것입니다. && 연산자를 사용하여 두 명령을 한 줄로 묶을 수도 있습니다. cd "c : \ Documents and Settings \ username \ svn"&& SVN add *. *
David

CD 예제에서, 캐럿은 필요하지 않습니다. CD는 이스케이프 할 필요가 없습니다
barlop

1
@ Chinggis6 흥미로운 .. 그것은 DIR에도 작동하지 않습니다. copy와 dir은 모두 명령에 내장되어 있습니다. CD도 마찬가지입니다. copy 및 dir은 파일 이름을 매개 변수로 사용합니다. dostips 포럼에 물어 가치가있을 수 있습니다
barlop

35

나는 위치의 한 부분에 따옴표를 넣는 것이 효과적이라는 것을 알았습니다. 귀하의 경우 :

SVN add C:\"Documents and Settings"\username\svn\*.*

여기에는 따옴표가 사용되지만 별표가 따옴표 밖에 있으므로 여전히 올바르게 작동 한다는 점에 유의해야 합니다.


7
또한 최소한의 것을 원한다면 공간이나 공백을 포함하는 문자 주위에 따옴표를 사용할 수 있습니다 (예 : C : \> cd documents "및 se"tting) 스페이스)
barlop

1
고마워 가능하다면 4 ~ 5 번
공언

@Sayka 질문은 " 따옴표를 사용하지 않고 Windows에서 명령 행에서 공백을 어떻게 피 합니까? "
barlop

2
@barlop 물론입니다. 그러나 따옴표가없는 이유는 별표가 따옴표 안에있을 때 별표가 작동하지 않기 때문입니다. 내가 제공 한 솔루션은 별표가 따옴표 밖에 있기 때문에이 문제를 피합니다. 이 답변은 질문 의 서한 을 따르지 않지만 질문의 정신 을 준수합니다 (즉, 의도 된 목적으로 작동 함).
키트 존슨

26

대답이 작동한다는 착각에도 불구하고 사실은 일반적인 cmd 인수로 공백을 몰래 넣을 수 없다는 것입니다. 이것은 증명하기 쉽다 :

  1. " echo %1"을 (를) 다른 이름으로 저장하십시오 test.bat. 이 배치 파일은 cmd가 전달하는 첫 번째 인수를 출력합니다.

  2. 이제 test.bat값을 %1로 설정 하여을 실행 하십시오 foo bar. ( foo와 사이에 공백 문자가 bar있습니다.)

  3. 몇 년 동안 시행 착오를 겪을 방법이 없다는 것을 깨달으 십시오 . 사람들은 사용을 피할 것을 제안 ^하지만 test.bat foo^ bar출력 하지는 않을 것이다 foo bar.

따라서 출력을 얻을 수있는 방법이 없으며 얻을 수있는 foo bar가장 가까운 것은 test.bat foo" "bar생산하는 foo" "bar또는 실행 test.bat "foo bar"하는 것 "foo bar"입니다.


이제 다른 답변이 이유 표시 작업에가 있기 때문입니다 cd수행 이 자신의의 통과 보통 인수의 행동 (평소 분기, 추가 분석 %1, %2, %3전형적인 배치 파일 등).

예를 들어, 독특한 명령을 고려하십시오.

cd c:\documents and settings \some folder with spaces

왜 작동합니까? 이로 인해 cd 자체가 7 개 가입 상응하는 뭔가하고 보통 하나의 논리 하나로 인수를. cmd 인수 전달 규범에 따르면 7 가지 인수가 있습니다.

  1. c:\documents
  2. and
  3. settings
  4. \some
  5. folder
  6. with
  7. spaces

마치 cd7 개의 모든 인수를 하나의 논리적 인수로 결합하여 비슷한 것을 수행 array.join(" ")하여 경로를 생성 하는 것처럼 보입니다 .

c:\documents and settings \some folder with spaces

이 동작은 (및 다른 기능 들만 ) 특이합니다cd . 일반적인 인수 전달과는 아무런 관련이 없습니다.


실제로 cd다른 특징이 있습니다. 우리는 출력을 얻을 수 없다고 위에서 언급 foo bar했는가? 우리가 얻을 수있는 가장 가까운 출력은 다음을 실행하는 것입니다.

test.bat foo" "bar

을 생성 foo" "bar하거나

test.bat "foo bar"

을 생성 "foo bar"하거나

test.bat "foo "bar

을 생성 "foo "bar하거나

test.bat foo" bar"

을 생성 foo" bar"하거나

test.bat "foo b"ar

을 생성 "foo b"ar하거나

test.bat fo"o bar"

을 생성 fo"o bar"하거나

test.bat fo"o ba"r

을 생성 fo"o ba"r하거나

test.bat "fo"o" bar"

을 생성 "fo"o" bar"하거나

test.bat "f""o""o"" ""b""a""r":

을 생성 "f""o""o"" ""b""a""r"하거나 심지어

test.bat """"f"""o""""o"" ""ba"""r"""""""""":

생산합니다 """"f"""o""""o"" ""ba"""r"""""""""".

위의 모든 예제는 하나의 유사성을 가지고 있는데, 이는 문자를 잘라낸 foo bar후에 생성 "됩니다. cd저자는 이것을 깨달았을 것입니다 ... 우리가 받는 모든 것을 다듬어이 모든 명령이 작동하도록 cd하는 독특한 행동 을 추론한다면 :"

  • cd c:\documents and settings

  • cd "c:\documents and settings"

  • cd "c:"\"documents and settings"

  • cd c:\"documents" "and" "settings"

  • cd c:\"docu"ments an"d set"tings"

  • cd c:"\"docu"ments an"d set"ti"""ngs

  • cd "c"":""\"docu"ments an"d set"ti"""ngs

  • cd "c"":""\"do""cu"me"nts a"n""d set"ti"""ngs

  • cd c"""":""""\"""d"""oc""""u"me"""""nt"s a"n""d set"""""""ti""""ngs


15
엉망 창 배치 프로그래밍 ...
Klangen

감사. 우리는 CD를 사용하는지 확인 할 수 argv[]GetCommandLine()? pastebin.com/raw/t55iv0JS
barlop

7

짧은 파일 이름은 산들 바람처럼 작동합니다.

"E : \ Progra ~ 1 \ Java \ Eclipse \ eclipse.exe"-vmargs -Xms1024m -Xmx2048m

메모리를 높이기 위해 ..;)


8
짧은 파일 이름이 비활성화 된 경우 작동하지 않을 수 있습니다
phuclv


2

8.3 교체에 대해 이야기하는 경우 다음 두 가지 사항에 유의하십시오.

  • NTFS에서는 8.3을 비활성화 (또는 활성화)로 설정할 수 있으므로 항상 존재하지 않을 수도 있습니다.
  • 파일 / 폴더의 8.3 이름은 동일한 폴더에서 다른 항목을 작성, 이름 바꾸기 또는 삭제하여 통지없이 변경 될 수 있습니다.

따라서 c:\docume~1가리킬 수 있습니다.

  • 아무데도 (잘못된)
  • 원하는 폴더
  • 다른 폴더
  • 시간에 따른 가변 폴더

짧은 이름을 얻어 원자 연산에 사용하지 않는 한 안전하지 않습니다.

변경되는 경우는 매우 드물지만 존재하지 않는 것이 일반적입니다.

특정 폴더 / 파일에 8.3이 존재하는지 알고 싶다면 명령에서 매개 변수 /X를 사용하여 테스트 dir하거나 for해당 부분 만 가져 오기 위해 파일을 캡슐화하십시오 .

NTFS에서 8.3을 활성화 / 비활성화하는 방법에 대한 자세한 내용은 다음 Microsoft 지원 문서를 참조하십시오.
https://support.microsoft.com/en-us/help/121007/how-to-disable-8-3-file-name- NTFS 파티션에서 생성


0

@Pang의 게시물과 짧은 이름과 함정에 대해 논의하는 다른 사람들에 이어 긴 이름을 짧은 이름으로 동적으로 해결하는 방법이 있습니다.

for %A in ("C:\Some\long path\which must exist\to be resolved") do @echo %~sA

그렇다면 따옴표 대신 짧은 이름을 사용할 수 있습니다.

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