2014-10-25 1 views
1

여기 무슨 일 이니? 배치가 왜 내 주장을 "올바르게"옮기지 않는지에 대해 완전히 당황 스럽다.% dp0의 배치 파일에서 시프트가 예상대로 작동하지 않는 이유는 무엇입니까?

C:\Users\Public>foo bar 
C:\Users\Public\ 
C:\Users\Public\ 
ECHO is off. 

이 경우는 '더 기대'은 다음과 같습니다 :

C:\Users\Public>foo c:/this/is/some/other/path 
C:\Users\Public\ 
c:\this\is\some\other\ 
ECHO is off. 

여기 내가 PARAM 그것을 실행할 때 발생하는 상황
@echo off 
echo %~dp0 
shift 
echo %~dp0 
shift 
echo %~dp0 

:

여기 foo.bat입니다

C:\Users\Public>foo this/is/some/other/path 
C:\Users\Public\ 
C:\Users\Public\this\is\some\other\ 
ECHO is off. 

하지만 누군가가 정확히 무슨 일이 일어나는지 명확히 할 수 있습니까? 나는 아마도이 더 확장 버전이 도움이 될 것입니다 ... 그것은 드라이브와 경로로 '바'를 해석하려고 노력하지만, 그냥 내 첫 번째 경우에서 '바'로 올 것

답변

1
@ECHO OFF 
SETLOCAL 
ECHO params=%* 
echo The drivename and PATH of the file "%~0" is %~dp0 
shift 
echo The drivename and PATH of the file "%~0" is %~dp0 
shift 
echo The drivename and PATH of the file "%~0" is %~dp0 
GOTO :EOF 

을 알 것 일어나는 일을 이해하는 데 도움이됩니다. 명시 적 디렉토리가 제공되지 않은 경우

cmd

0

이하도록되어 일을한다 ... in the current directory을 가정합니다.

이것은 교대와는 아무런 관련이 없습니다.

막대의 드라이브와 경로가 표시됩니다. 바는 파일이 아니기 때문에 빈 드라이브와 경로를 보여줍니다. 박쥐 파일에

"C:\Users\User\Desktop\b.bat" c:\windows\win.ini bar 

echo %~dp1 
echo %~dp2 
관련 문제