2017-08-08 14 views
1

大規模なバッチファイルをいくつかの小さなバッチファイルに分割しました。きちんとしている私は、個々のスクリプトをプロジェクトフォルダのサブフォルダに入れます(マスタースクリプトはプロジェクトフォルダにあります)。親のサブフォルダの相対パスを取得する

しかし、これは問題を引き起こしました。私は、新しい個々のスクリプトでいくつかのパスを変更する方法を考えることができません。ここではどのようなものであるか、レイアウトおよそ次のとおりです。

Project 
|---MasterScript.bat 
| 
|---Scripts 
| |---scriptA.bat 
| 
|---Exes 
| |---program.exe 
| |---config.xml 

だから、マスタースクリプトは、バッチスクリプトのそれぞれを呼び出し - Aと引数/config config.xmlprogram.exeを呼び出すAスクリプト。

問題は、program.exeと​​3210の対処方法です。

残念ながら、バッチファイルのパスがどのように解決されているかを実際に把握せずにこれらのスクリプトを一緒にハッキングしているため、親フォルダなどの関係を使用して相対パスを記述する方法はまったくありません。

本質的に、私は相対的なバッチパスを書く方法と、これらのパスを書く方法を尋ねています。

+0

バッチスクリプト 'scriptA.bat'に'〜dp0 .. \ Exes \ program.exe'を 'program.exe'を指すように書く。 'call /?'と入力して '%〜dp0'が何を意味するのかを知る – aschipfl

答えて

0

%~dp0は、バッチファイル自体である引数0のドライブとパスに展開されます。このファイルパス参照は、常にバックスラッシュ付きのパスに展開されます。複数のディスプレイ上で、コマンドプロンプトウィンドウでcall /?を実行しているのヘルプ出力に記述されているどのように修飾することなく、またはでバッチファイルの引数(パラメータ、オプション)を参照するためにのみ

@echo off 
echo Batch file path is: "%~dp0" 
pause 

を含むバッチファイルでそれを試してみてくださいページ。

ショート相対パスチュートリアル:ディレクトリやファイル名の名前で始まる

  1. パスはカレントディレクトリに対して相対的です。

  2. .\で始まるパスも現在のディレクトリに関連しています。

  3. ..\で始まるパス現在のディレクトリの親ディレクトリ

  4. ちょうど\で始まるパスは、現在のDRIVEのルートディレクトリに関連しています。
    たとえば、\Windowsは、現在のドライブのルートにあるディレクトリWindowsを、現在のディレクトリであるディレクトリに関係なく参照します。

.\..\

もほぼどこでもパス内の1つのまたは複数回使用することができます。 .\..\は、文字列とコロンをドライブするために使用することはできません。これは、現行ディレクトリまたは親ディレクトリ内の名前にコロンを含むディレクトリが指定されている可能性があるためです。

..\..\またはさらに..\を順番に使用すると、現在のディレクトリと比較して2つ以上のディレクトリをディレクトリ構造の上位に参照するのに役立ちます。

実行中のアプリケーションでは、~dp0..\Exes\program.exeを使用することは絶対に有効です。

アプリケーションやスクリプトに渡される引数に絶対パスと相対パスの混在したディレクトリやファイルを参照することも問題ありません。

しかし、実際の絶対パスが純粋な相対パスか、絶対パスと相対パスの両方から判断され、アプリケーションまたはスクリプトへのパスを持つディレクトリまたはファイル名を渡す前に、渡されたディレクトリ/ファイル名を含むエラーメッセージ。

コマンドを使用すると、相対パスまたは絶対パスと相対パスの混在したディレクトリまたはファイルのフルパスを取得できます。

例:

@echo off 
for /F %%I in ("%~dp0..\Exes") do set "FullExesPath=%%~fI" 
echo Path to project executables: "%FullExesPath%" 
pause 

注:この解決されたパスの末尾にバックスラッシュはありません。ファイル参照に%FullExesPath%を使用する場合、このディレクトリ参照と文字列を読みやすくするファイル名の間にバックスラッシュを入力する必要があります。

コマンドの場合の場合コマンドプロンプトウィンドウfor /?で実行し、出力ヘルプページをよくお読みください。

関連する問題