BAT 스크립트의 상대 경로


130

내 USB 드라이브의 내 프로그램 폴더는 다음과 같습니다.

Program\
     run.bat
     bin\
         config.ini
         Iris.exe
         library.dll
         etc.

run.bat시작하는 데 사용 하고 싶습니다Iris.exe

나는 이것을 F:/Program/bin/Iris.exe드라이브로 연결하지 않기 때문에 바로 가기처럼 사용할 수 없습니다 F:( 예 : E: 또는 G:)

드라이브 문자와 상관없이 작동하려면 bat 파일에 무엇을 작성해야합니까?

나는 BAT 파일에서 이것을 시도했다 :

"\bin\Iris.exe"

그러나 작동하지 않습니다.

답변:


275

배치 파일에서 이것을 사용하십시오.

%~dp0\bin\Iris.exe

%~dp0 배치 스크립트가있는 폴더의 전체 경로로 확인됩니다.


7
실제로 이것은 다음과 같이 해결됩니다 C:\myDir\\bin\Iris.exe(이중 백 슬래시 참고). 이것은 여전히 ​​작동하지만 bin이 "깨끗한"것처럼 보이기 전에 백 슬래시를 남기지 않습니까? -> %~dp0bin\Iris.exe.
mozzbozz 2014

8
@mozzbozz %~dp0항상 뒤에 백 슬래시가 있음 을 보장 할 수 있으면 두 명령문이 모두 작동합니다. 그렇지 않으면 추가 백 슬래시가있는 것이 더 안전한 변형입니다.
Ansgar Wiechers

4
좋아, 그게 요점이야 나는 이것을 두 개의 다른 Windows 7 컴퓨터에서만 테스트했으며 다른 곳에서는 다를 수 있습니다 (XP, Vista 또는 Windwos 8-> 모르겠지만 Microsoft 논리 및 관련 문서를 찾을 수 없었습니다.)). 그러나 "%~dp0\bin\Iris.exe"경로에 공백이 있으므로 따옴표를 묶어야한다는 것을 알았 습니다. :) 모든 컴퓨터에서 실제로 작동하는지 확인하십시오.
mozzbozz

1
SET "scriptdir=%~dp0"다음 줄에 백 슬래시가 있는지 확인할 수 있습니다 IF NOT "%scriptdir:~-1%"=="\" SET "scriptdir=%scriptdir%\". 경로 중간에 이중 백 슬래시가 소프트웨어를 손상시키는 사건을 보았습니다.
LogicDaemon

40

아래 코드를 사용하여 필요한 파일 속성을 모두 얻을 수 있습니다.

FOR %%? IN (file_to_be_queried) DO (
    ECHO File Name Only       : %%~n?
    ECHO File Extension       : %%~x?
    ECHO Name in 8.3 notation : %%~sn?
    ECHO File Attributes      : %%~a?
    ECHO Located on Drive     : %%~d?
    ECHO File Size            : %%~z?
    ECHO Last-Modified Date   : %%~t?
    ECHO Parent Folder        : %%~dp?
    ECHO Fully Qualified Path : %%~f?
    ECHO FQP in 8.3 notation  : %%~sf?
    ECHO Location in the PATH : %%~dp$PATH:?
)

24

%CD%스크립트의 경로가 아니라 스크립트가 호출 된 경로를 %~dp0제공 하지만 스크립트 자체 의 경로 를 제공 한다는 것을 알았 습니다 .


14

현재 디렉토리를 사용할 수 있어야합니다

"% CD %"\ bin \ Iris.exe


1
현재 디렉토리가 아닌 경우에 실패합니다 . 탐색기에서 Program를 두 번 클릭하면 run.bat발생합니다. %CD%현재 디렉토리 %~dp0는 배치 파일 자체의 디렉토리입니다
jeb

5

bin\Iris.exe (NO 슬래시를 선도하는 - 그 수단이 루트에서 바로 시작하기 때문에)
또는 \Program\bin\Iris.exe(전체 경로)


1
bin \ Iris.exe 작동하지 않습니다 :( 언젠가 루트를 사용하고 싶지 않습니다. 언젠가이 디렉토리를 다른 위치로 옮길 수 있기 때문에 OS에서 현재 절대 경로를 묻는다면 어떻게해야합니까? 그게 빈에서 EXE를 시작하는?
user2083037

나는 현재 드라이브가 USB 스틱의 드라이브라고 가정하고 현재 폴더는 \Program그렇지 않습니까? cd
AjV Jsy

상대 경로를 사용하는 것이 반드시 효과가있는 것은 아닙니다. 경로는 현재 작업중인 디렉토리와 관련이 있으며의 상위 디렉토리와 다를 수 있습니다 run.bat.
Ansgar Wiechers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.