• ベストアンサー

DOSのバッチファイルでカレントフォルダを取得するには?

現在バッチファイルにファイルをドラッグ&ドロップするとそのファイルを処理するようなバッチを組もうとしています。 おおまかな流れとして  1.ファイルのバックアップ  2.test.exeの引数にファイルのパスを渡す といった事をしたいのですが、バッチファイルにドラッグ&ドロップするとカレントフォルダがC:\Documents and Settings\user\になってしまいます。 バッチファイルのある場所をカレントフォルダとするにはどうすればよいのでしょうか。 以下カレントフォルダを確認した結果です。 OS:Windows2000 実行バッチのパス: C:\Documents and Settings\user\デスクトップ\test.bat ---test.bat---- @echo off cd pause test.bat直接起動 C:\Documents and Settings\user\デスクトップ test.batにファイルをD&D C:\Documents and Settings\user 伝わりづらくて申し訳ございません。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • gatyan
  • ベストアンサー率41% (160/385)
回答No.1

Windows2000なら、 cd /d %0\.. としてみてください。

ak9457
質問者

お礼

ご教授いただいた方法でうまく出来ました。 ファイルでもフォルダみたいな扱いができるんですね。 ありがとうございました。

その他の回答 (2)

  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.3

D&Dしたファイルのファイル名(フルパス名)は、バッチファイル内では、バッチファイルに渡されるパラメータとして、%1に格納されています。 また、バッチファイル自身のフルパス名は、%0に格納されています。 で、%0から、パス名やファイル名だけを取り出すには、パラメータ修飾子を使用します。(下記の括弧内は、ファイル名が"C:\Documents and Settings\user\デスクトップ\test.bat"の時の例) %0  :パラメータ全体("C:\Documents and Settings\user\デスクトップ\test.bat"⇒パス名にスペースが含まれているので、引用符(")が付く) %~d0 :%0からドライブ名だけを取り出す。(C:) %~p0 :%0からパス名だけを取り出す。(\Documents and Settings\user\デスクトップ\⇒両端に"\"が付く) %~n0 :%0からファイル名だけを取り出す。(test) %~x0 :%0からファイル拡張子だけを取り出す。(.bat) %~s0 :%0をMS-DOSの8.3形式の短いファイル名を取り出す。(C:\DOCUME~1\USER\デスク~1\TEST.BAT) (複数の修飾子を組み合わせることも可能) なので、"test.bat"のパス名は、"%~dp0"で取り出せます。 cd %~dp0  (または、cd "%~dp0"←パス名にスペースが含まれる時) 『コマンドプロンプトを使ってみよう:バッチパラメータ・修飾子』 http://ykr414.com/dos/bat.html#05

参考URL:
http://ykr414.com/dos/bat.html#05
ak9457
質問者

お礼

バッチパラメータがここまで詳細に指定できるとは驚きました。 とても参考になりました。 ありがとうございます。 尚、回答いただいた方の回答はどの回答もとても参考になったので回答をいただいた順にポイントを割り振らせていただきたいと思います。 貴重な回答をありがとうございました。

  • MasamiH
  • ベストアンサー率21% (13/61)
回答No.2

バッチファイル中でecho %1 を実行してみればドラッグ&ドロップしたファイルのパスは正しく表示されますね。 一方、バッチファイルをエクスプローラから起動したときのカレントディレクトリは、環境変数の HOMEPATHが使われると思います(echo %HOMEPATH% で確認可能)。これをドラッグしたファイルのパスごとに切り替えるのは難しい気がしますが。 たとえば、"C:\Documents and Settings\user\temp\file.txt" がドラッグされたファイルだとして、.....temp\までを切り出せればいいのでしょうが、コマンドでそこまでできるのかは私にはわかりません。 Wscript/Cscriptを使ってみるのはどうでしょう。 これは一種の言語ですので新たに学ばねばなりませんが。

ak9457
質問者

お礼

よく分からない場所がカレントフォルダになってしまうと思っていたのは環境変数のHOMEPATHだったんですね。 貴重な情報ありがとうございました。 また、.....temp\までの切り出しについてですが、deadlineさんの回答を参考に%~dp1で取得できました。

関連するQ&A