- Windows 탐색기로 이동라는 이름의 폴더 / 디렉토리 생성
%systemdrive%
,%windir%
또는 기존의 다른 변수를. - 명령 프롬프트를 열고 방금 만든 폴더로 이동하십시오.
%
백분율 기호는 기존 변수에 사용되므로 폴더 이름에 백분율 ( ) 기호가 있기 때문에 명령 프롬프트를 혼동 할 수 없습니다 .
백분율 ( %
) 기호를 두 백분율 기호 ( %%
)로 이스케이프하면 작동하지 않으므로 DavidPostill의 답변이 잘못되었습니다.
따라서 Windows 탐색기 %
에서 백분율 기호가 기존 변수에 사용되는 경우 백분율 ( ) 기호 로 폴더 나 파일을 만들 수있는 이유는 무엇입니까?
답변
퍼센트 기호로 폴더 / 파일을 만들 수있는 이유는 무엇입니까?
%
문자는 파일 이름에 예약 된 문자가 아닙니다.
파일, 경로 및 네임 스페이스 이름 지정을 위해 예약 된 문자는 다음과 같습니다.
< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)
퍼센트 기호는 변수를 위해 예약되어 있습니다
이제 명령 프롬프트를 열고 작성한 폴더로 이동하십시오.
폴더 이름에 백분율 기호가있어서 변수임을 나타내는 것은 불가능합니다.
위의 사실이 아닙니다. 모든 것이 예상대로 작동합니다.
사용 예 %test%
:
F:\test>echo %test%
%test%
F:\test>md %test%
F:\test>cd %test%
F:\test\%test%>
사용 예 %systemdrive%
:
F:\test>echo %systemdrive%
C:
F:\test>md %systemdrive%
A subdirectory or file C: already exists.
F:\test>cd %systemdrive%
C:\Users\DavidPostill
F:\test>c:
C:\Users\DavidPostill>f:
F:\test>
F:\test>dir %systemdrive%
Volume in drive C has no label.
Volume Serial Number is C8D0-DF1E
Directory of C:\Users\DavidPostill
03/06/2016 16:16 <DIR> .
03/06/2016 16:16 <DIR> ..
18/07/2015 19:25 <DIR> .atom
03/06/2016 16:16 <DIR> .oracle_jre_usage
08/05/2015 20:29 <DIR> Contacts
03/06/2016 16:14 <DIR> Desktop
01/06/2016 09:04 <DIR> Documents
02/05/2016 12:55 <DIR> Downloads
09/01/2015 11:51 <DIR> dwhelper
08/05/2015 20:29 <DIR> Favorites
20/02/2016 22:00 <DIR> Jaikoz
08/05/2015 20:29 <DIR> Links
17/03/2015 06:19 <DIR> Music
29/03/2016 19:01 <DIR> Pictures
08/05/2015 20:29 <DIR> Saved Games
23/06/2016 10:55 <DIR> Searches
02/05/2016 12:36 <DIR> SecurityScans
11/04/2016 12:14 994 Start Menu - Shortcut.lnk
31/05/2016 00:52 <DIR> temp
17/03/2015 06:19 <DIR> Videos
1 File(s) 994 bytes
19 Dir(s) 69,716,357,120 bytes free
탈출 퍼센트
%
문자는 명령 줄 매개 변수와의 특별한 의미가 FOR
매개 변수를.
퍼센트를 일반 문자로 취급하려면 두 배로 늘리십시오.
%%
소스 구문
추가 자료
- Windows CMD 명령 행의 AZ 색인 -Windows cmd 행과 관련된 모든 것에 대한 훌륭한 참조 자료.
- 구문 -이스케이프 문자, 구분 기호 및 따옴표.
답변
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 하위 시스템이이를 수행 할 수 있는지 잘 모르겠습니다.