Windows 명령줄에서 파일 경로의 공백을 이스케이프하는 방법

명령어 줄 인터페이스, 예를 들어 Windows의 명령 프롬프트나 PowerShell 환경에서는 명령어와 인수를 구분하기 위해 공백을 사용합니다. 하지만 파일이나 폴더 이름에도 공백이 포함될 수 있습니다. 따라서 공백이 포함된 파일 경로를 지정할 때는 해당 경로를 “이스케이프” 처리해야 합니다.

명령줄 환경에서 공백 이스케이프가 필요한 이유

“이스케이프” 문자라는 것은 특정 문자의 원래 의미를 변경하는 역할을 합니다. 예를 들어, 공백을 이스케이프하면 셸(shell) 환경에서 해당 공백을 명령줄 인수를 구분하는 특수 문자가 아닌, 일반적인 공백 문자로 인식하게 됩니다.

예를 들어, 텍스트 파일의 내용을 확인하고 싶다고 가정해 봅시다. type 명령을 사용하여 이를 수행할 수 있습니다. 만약 해당 파일이 C:TestFile.txt 경로에 있다면, 명령 프롬프트에서 다음 명령을 입력하면 파일 내용을 볼 수 있습니다.

type C:TestFile.txt

하지만 만약 동일한 파일이 C:Test FolderTest File.txt 경로에 있다면 어떻게 될까요? 아래와 같은 명령을 실행하려고 하면 오류가 발생합니다. 파일 경로 내에 있는 공백이 문제를 일으키기 때문입니다.

type C:Test FolderTest File.txt

명령줄은 C:Test라는 파일을 찾으려고 시도하며, “지정된 경로를 찾을 수 없습니다”라는 메시지를 표시합니다.

Windows 환경에서 공백을 이스케이프하는 세 가지 방법

Windows에서는 파일 경로를 이스케이프 처리하는 세 가지 방법이 있습니다.

  • 전체 경로(또는 경로 일부)를 큰따옴표 (“)로 감쌉니다.
  • 각 공백 앞에 캐럿 문자 (^)를 추가합니다. (이 방법은 명령 프롬프트/CMD에서만 작동하며, 모든 명령어에서 동작하지 않을 수 있습니다.)
  • 각 공백 앞에 백틱 문자 (`)를 추가합니다. (이 방법은 PowerShell에서만 작동하며, 항상 동작합니다.)

각 방법을 자세히 살펴보겠습니다.

큰따옴표 (“)로 경로 감싸기

Windows에서 파일 경로를 올바르게 처리하는 가장 일반적인 방법은 파일 경로를 큰따옴표 (“)로 묶는 것입니다. 위에서 사용했던 예시 명령을 사용하여 다음과 같이 변경하여 실행할 수 있습니다.

type "C:Test FolderTest File.txt"

원한다면 경로의 일부분만 큰따옴표로 묶을 수도 있습니다. 예를 들어, 해당 폴더에 File.txt라는 파일이 있다고 가정하고 다음과 같이 실행할 수 있습니다.

type C:"Test Folder"File.txt

하지만 대부분의 경우 전체 경로를 큰따옴표로 묶는 것이 가장 간단합니다.

이 방법은 기존 명령 프롬프트 (CMD) 환경과 Windows PowerShell에서 모두 작동합니다.

캐럿 문자 (^)를 사용하여 공백 이스케이프 (제한적 사용)

명령 프롬프트에서 캐럿 문자 (^)를 사용하여 공백을 이스케이프하는 방법도 있습니다. 파일 이름의 각 공백 앞에 이 문자를 추가하면 됩니다. (캐럿 문자는 키보드의 숫자 행에서 찾을 수 있으며, Shift + 6 키를 눌러 입력합니다.)

하지만 여기에는 문제가 있습니다. 이 방법이 때로는 작동하지만 항상 작동하지는 않습니다. 명령 프롬프트에서 이 문자를 처리하는 방식이 일관적이지 않기 때문입니다.

예를 들어, 위에서 사용한 예시 명령을 다음과 같이 실행하면 제대로 작동하지 않습니다.

type C:Test^ FolderTest^ File.txt

반면, 명령 프롬프트에 파일 경로를 직접 입력하여 파일을 실행하려고 할 때는 캐럿 문자가 공백을 이스케이프하는 것을 확인할 수 있습니다.

C:Test^ FolderTest^ File.txt

그렇다면 언제 작동할까요? 연구 결과에 따르면, 일부 응용 프로그램에서는 작동하지만 다른 응용 프로그램에서는 작동하지 않는 것으로 보입니다. 결과는 사용 중인 명령에 따라 달라질 수 있습니다. 명령 프롬프트에서 이 문자를 처리하는 방식이 다소 불안정합니다. 어떤 명령을 사용하든 한번 시도해 볼 수는 있지만, 성공을 보장할 수는 없습니다.

일관성을 위해서는 명령 프롬프트에서 큰따옴표를 사용하거나, PowerShell로 전환하여 아래에 설명된 백틱 문자를 사용하는 것이 좋습니다.

PowerShell: 백틱 문자 (`) 사용

PowerShell에서는 백틱 문자 (`)를 이스케이프 문자로 사용합니다. 파일 이름의 각 공백 앞에 이 문자를 추가하면 됩니다. (백틱 문자는 키보드의 Tab 키 위, Esc 키 아래에 있습니다.)

type C:Test` FolderTest` File.txt

각 백틱 문자는 PowerShell에게 바로 뒤에 오는 문자를 이스케이프 처리하도록 지시합니다.

이 방법은 PowerShell 환경에서만 작동합니다. 명령 프롬프트에서는 캐럿 문자를 사용해야 합니다.

만약 Linux나 macOS와 같은 UNIX 계열 운영체제에 익숙하다면, 공백 앞에 백슬래시 (\\) 문자를 사용하여 이스케이프 처리하는 데 익숙할 것입니다. 하지만 Windows에서는 백슬래시를 일반적인 파일 경로 구분자로 사용하므로 해당 방법이 작동하지 않습니다. Windows에서는 사용 중인 명령줄 셸에 따라 캐럿 (^) 및 백틱 (`) 문자가 백슬래시와 유사한 역할을 합니다.