DavidPostill의 답변은 훌륭하지만 새로 온 사람들을 약간 혼란스럽게 할 수 있습니다. 나는 문구를 바꾸려고 노력할 것이다.
%
예약 된 문자 가 아닙니다 .
명령 셸에 특별한 의미 를 가진 문자입니다 (일명 and ).cmd.exe
command.com
차이점은 다음과 같습니다.
- 예약 문자를 전혀 사용할 수 없습니다 (하지만 아래 참조).
- 특수 문자와 이스케이프 문자를 그대로 사용할 수 있습니다.
즉, %
이름에 포함 된 파일 또는 폴더를 만들 수 있습니다 . %
특별한 의미가 없기 때문에 Windows 탐색기를 사용하여 직접 할 수 있습니다 . 명령 프롬프트에서 이러한 파일을 만들지 않으려는 의도는 없었지만 %
특별한 의미가 있으므로 아래에 설명 된 구문을 사용하여 해당 파일을 만들어야합니다.
BAT 파일
당신이하는 경우 배치 파일 작성 (명령 프롬프트 응용 프로그램 일명) 명령 쉘에 의해 실행하세요 (* .BAT, * .CMD)를 사용하기 %
로 파일을 작성 (예 : 문자로 %
대체 할 이름으로, 그리고 변수 또는 매개 변수)를 %%
대신 입력해야합니다 .
예를 들어
- 명령
echo %windir%
은 출력을 생성합니다.c:\windows
- 그러나 command
echo %%windir%%
는 출력을 생성합니다.%windir%
- 등등 : 명령
echo %%%%windir%%%%
은 출력을 생성합니다 :%%windir%%
따라서 다음 줄을 다른 이름으로 저장 test.bat
하고 실행하면 %test%
퍼센트 기호로 complete 라는 이름의 디렉토리가 생성됩니다 .
md %%test%%
이름 이 지정된 변수 가 없는test
경우이 다음 명령은 마지막 명령과 동일하며 디렉토리도 작성합니다 %test%
.
md %test%
...하지만 누군가가 그 이름으로 변수를 만들면 명령이 원하는 방식으로 작동하지 않으므로 절대 그렇게하지 마십시오.
for
BAT 파일에서 명령을 사용하려는 경우 명령 쉘 자체 대신 명령에 %
특별한 의미를 갖도록 두 배로 for
늘려야합니다.
for %%i in (*.*) do echo %%i
이렇게하면 현재 디렉토리에 파일 목록이 생성됩니다 (즉, %%i
특별한 의미가 있음) . 다음 섹션에서 설명 %%i
하는 %p%
해결 방법을 사용 하지 않고 리터럴 을 생성하는 방법을 잘 모르겠습니다 ( %%%%i
여기에서는 작동하지 않음).
%
명령 프롬프트에서 특별한 의미를 가진 유일한 문자는 아닙니다. 기타 포함 ^
, <
, >
, |
, (
, )
, &
, !
, "
. 을 제외한 대부분의 문자는 이스케이프 처리"
할 수 있습니다 . 즉, 특수 문자를 삽입하여 리터럴 문자가 삽입되도록 이스케이프 문자를 접두어로 사용할 수 있습니다 . 또한 큰 따옴표로 묶은 문자열에서 특수 기능을 잃고 백 슬래시로 이스케이프됩니다 . 일부 캐럿 ( )은 큰 따옴표로 묶은 문자열 내부에서 두 배가되어야하고 지연된 변수 대체가 발생하는 곳 ( 특별한 의미) 이 필요할 수 있습니다 .^
"
\"
^
!
명령 프롬프트
불행히도, 명령 프롬프트 창에 명령을 직접 입력하면 %
문자를 두 배로 늘리면 %%
위와 같은 접근 방식이 작동하지 않습니다.
명령 처리 과정에서 문제를 악용하는 해결 방법이있는 것 같습니다 . after %
를 입력하여 리터럴 을 얻을 수 있습니다 . 파일 이름이 큰 따옴표로 묶인 경우 문자 그대로 해석되며 따옴표없이 제거되지 않습니다.^
%
^
- 명령
echo %windir%
은 출력을 생성합니다.c:\windows
- 명령
echo %^windir%
은 출력을 생성합니다.%windir%
- 명령은
echo "%^windir%"
출력을 생성합니다 "%^windir%"
(추가로 ^
- 우리가 원하지 않는 것)
대신 다른 해결 방법을 권장합니다.
- 다음과 같은 변수를 작성하십시오.
set "p=%"
%p%
리터럴 퍼센트 부호가 필요한 곳에 사용 하십시오 : echo "%p%windir%p%"
이제 출력을 생성합니다 :"%windir%"
동일한 해결 방법을 사용하여 리터럴 퍼센트 로그인 for
명령 을 가져올 수 있지만, for
명령을 직접 입력 할 때 BAT 파일과 달리 퍼센트 부호는 두 배가 되지 않습니다 .
파일 시스템 예약 문자
일반적으로 이름에 다음과 같은 예약 문자가 포함 된 파일 또는 디렉토리를 작성할 수 없습니다. /
?
<
>
\
:
*
|
"
, NULL 기호 및 코드가 1-31 인 문자; 또한 .
및 공간은 마지막 문자가 될 수 없습니다; 다음 이름은 불법 com1
com2
com3
com4
com5
com6
com7
com8
com9
lpt1
lpt2
lpt3
lpt4
lpt5
lpt6
lpt7
lpt8
lpt9
con
nul
prn
입니다..
그러나 이러한 제한 중 일부 는 다음과 \\?\
같은 접두사 파일 경로를 무시할 수 있습니다 \\?\c:\test...\nul
. 최소한 예약 된 이름을 가진 파일과 공백과 점으로 끝나는 파일은 그런 식으로 조작 할 수 있습니다.
또한 NTFS 파일 시스템 자체는 DOS, Windows 및 POSIX와 같은 여러 명명 하위 시스템을 지원합니다. 위의 모든 제한 사항이있는 것은 Windows 서브 시스템이지만 POSIX는 /
NULL 기호 만 금지 합니다.
따라서 GNU / Linux OS (POSIX의 상위 집합)는 대부분의 일반 Windows API 기능 (및 Windows 프로그램)에서 사용할 수없는 파일 / 디렉토리 이름을 작성 및 삭제할 수 있습니다. Windows XP에서는 무료 "Services For Unix 하위 시스템"(SFU)을 설치하여 이들과 함께 작업 할 수있었습니다. Vista 및 그 이상의 타사 도구가 필요합니다. 새로운 ubuntu-on-windows10 하위 시스템이이를 수행 할 수 있는지 잘 모르겠습니다.
<test>
. 단순히 Windows의 파일 관리 기능을 사용하여 수행 할 수 없습니다.