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、2014年

4
OK、それがポイントです。私はこれを2つの異なるWindows 7マシンでのみテストしましたが、他の場所では異なる可能性があります(XP、VistaまたはWindwos 8->わかりませんが、Microsoftのロジックと、それに関するドキュメントが見つかりませんでした;))。しかし、私は(それを囲む引用符を入れていたことがわかった"%~dp0\bin\Iris.exe"パスがためにそれ:)だけで空白を持っていたとして)本当にわからそれはすべてのコンピュータ上で動作します。
mozzbozz 2014年

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バッチファイル自体のディレクトリです
ジェブ

5

どちらか bin\Iris.exe (なしスラッシュ-その手段はルートから右始めるため)
または\Program\bin\Iris.exe(フルパス)


1
bin \ Iris.exe動作しません:(いつかこのディレクトリを別の場所に移動する可能性があるため、ルートを使用したくありません。そして、OSから現在の絶対パスを尋ねるとどうなりますか? binでexeを開始するには
user2083037

現在のドライブはUSBスティックのドライブであり、現在のフォルダーは\Program-だと思いましたが、そうではありませんか?cd.exeを実行する前に、行の簡単なコマンドでそれを示すことができます
AjV Jsy

単純に相対パスを使用するだけでは機能しません。パスは現在の作業ディレクトリからの相対パスであり、の親ディレクトリとは異なる場合がありrun.batます。
Ansgar Wiechers 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.