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.