이 Windows 명령 작동 방식 : echo % path :; = & echo. %


답변:


22

그것은 내가 본 적이없는 흥미로운 솔루션입니다. 설명해 드리겠습니다.

  1. 전체 경로를 인쇄하려면을 사용하십시오 echo %path%. 세미콜론 ( ;) 으로 구분 된 모든 행을 한 줄로 인쇄합니다.
  2. 변수에서 문자열을 검색 / 바꾸려면 %path:a=b%모든 a문자를b
  3. echo. 줄 바꿈을 인쇄하는 데 사용됩니다
  4. &명령을 분리하는 데 사용됩니다. 예 : echo line1&echo line2두 줄을 인쇄합니다
  5. 실제로 경로의 세미콜론 은 줄 바꾸기를 인쇄하는 명령 으로 바뀝니다 . 아니면 그것은 '교체로 해석됩니다 ;아무것도, 다음 , 줄 바꿈을 인쇄'. 이것에 대한 문서를 찾을 수 없으므로 내 해석 일뿐입니다. 솔직히, 나는 그것이 가능하다는 것을 몰랐지만 거기에 갔다. 업데이트이 단계에 대한 나의 해석은 꺼져있는 것 같으며 wizzwizz4에 의해 더 잘 설명됩니다 .

%% 부호는 무엇을 위해 사용 echo path됩니까? %%가 변수에 사용됩니까?
yekanchi

1
예, 맞습니다. 변수의 값을 얻는 데 사용됩니다. 예를 들면 다음 set greeting=Hello과 같습니다 echo %greeting%. 혼동, PATH그래서 명령을 입력 명령과 변수를 모두 될 일이 path, 또는 echo %path%같은 결과를해야합니다.
Berend

이 구문은 무엇입니까? 정규식입니까? 또는 Windows CMD에만 사용되는 것
yekanchi

이 이름이 있는지 확실하지 않습니다 .DOS에서 변수가 작동하는 방식 일뿐입니다. bash와 같은 다른 언어가 사용 $PATH됩니다.
Berend

2
이것은 DOS와는 아무런 관련이 없습니다. Berend; 그리고 echo."명령이 줄 바꿈을 인쇄 할 수"없습니다. 이것은 Windows NT 용 Microsoft의 명령 인터프리터 입니다 cmd. 그리고 경로 요소가 비어 있으면 경로 요소가 비어 있으면의 다른 기능으로 전환되지 않도록echo. 경로 요소를 인쇄하는 명령 입니다 . 첫 번째 는 너무 되어야합니다 . echoechoecho.
JdeBP

30

이것은 명령 행 변수 대체를 사용하고 있습니다. %path:;=&echo.%"를 의미 %path%하지만 모든 ;&echo."로 대체하십시오 . 이는 다음과 set path=C:\Windows\System32;C:\Windows\;;C:\Python37;같이 의미합니다 .

echo %path:;=&echo.%

된다 :

echo C:\Windows\System32&echo.C:\Windows\&echo.&echo.C:\Python37&echo.

이후 &명령 분리기이며, 이는 등가이다 :

echo C:\Windows\System32
echo.C:\Windows\
echo.
echo.C:\Python37
echo.

DOS 배치의 단점으로 인해 그 뒤에 아무것도없는 경우 echo.echo 제외하고 는 동일 합니다. 이 경우 ECHO켜져 있는지 여부를 알려주 는 대신 아무 것도 인쇄하지 않습니다 . 출력이됩니다 :

C:\Users\wizzwizz4> echo %path:;&echo.%
C:\Windows\System32
C:\Windows\

C:\Python37

C:\Users\wizzwizz4> 

실제로 echo.%path:;=&echo.%%PATH%시작 하는 경우를 고려해야 ;하지만이 명령은 어쨌든 매우 영리합니다.


자세한 detalias로 들어가는 대신 실제로 echo( 사용해야합니다 echo.. 이것은 echo.이라는 파일이있을 때 문제가있을 수 echo있기 때문에 실행 될 때마다 디스크 ( %CD%그리고 모든 것을 생각 합니다)를 확인해야하기 때문에 느립니다 %PATH%. (그것은 그냥 내가 나 자신을 확인할 수 없습니다, 그래서 나는 윈도우의 사본이없는 %CD%시작 또는 어느 곳 %PATH%의 존재한다는 echo파일이 영향을 미칠 것이다 echo., 그것은 무엇입니까?)


이는 여러 운영 체제에서 오랫동안 Microsoft / IBM 명령 해석기의 동작이며 배치 스크립트에만 국한되지는 않습니다. superuser.com/a/310157/38062 년 전에 언급했듯이 명령 이름 종료 문자로 계산되는 공백 외에도 몇 가지 문장 부호 문자가 있습니다.
JdeBP

@ JdeBP 더 효율적인 것 중 하나는이라고 생각 echo)하지만 실제로는 기억하지 못합니다. ;-(
wizzwizz4

3
echo.사람들이 몇 년 전에 가장 많이 유통했던 적이 있습니다. 그것은 많은 책들 중 하나입니다. 효율성은 문제가되지 않습니다. 다양한 파일이 존재할 때 이상한 행동입니다. cmdOS / 2에서 16 비트를 32 비트로 대체 할 때 이러한 문장 부호 문자에서 명령 이름을 깨뜨리고이 매우 불규칙적 인 구문 분석 동작은 의도적으로 복제하지 않았으며 문서화 한 것 중 하나입니다. 차이점 목록. echodot대신 외부 명령을 만들었 는데 echo.원하는대로 별칭을 지정할 수 있습니다.
JdeBP

@JdeBP 정말 재미 있겠다! 그 중 일부를 문서화 할 수 있다고 생각하십니까 ?
wizzwizz4

다양한 댓글 링크를 echo(따르면 유일한 안전한 버전 인 타사 포럼 메시지 가 표시됩니다.
Neil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.