DOSのバッチファイルでカレントフォルダを取得するには?
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
伝わりづらくて申し訳ございません。
宜しくお願い致します。
投稿日時 - 2005-05-31 23:25:30
0 人が「このQ&Aが役に立った」と投票しています
回答(2)
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
投稿日時 - 2005-06-01 00:24:14
バッチパラメータがここまで詳細に指定できるとは驚きました。
とても参考になりました。
ありがとうございます。
尚、回答いただいた方の回答はどの回答もとても参考になったので回答をいただいた順にポイントを割り振らせていただきたいと思います。
貴重な回答をありがとうございました。
投稿日時 - 2005-06-01 01:05:26
バッチファイル中でecho %1 を実行してみればドラッグ&ドロップしたファイルのパスは正しく表示されますね。
一方、バッチファイルをエクスプローラから起動したときのカレントディレクトリは、環境変数の HOMEPATHが使われると思います(echo %HOMEPATH% で確認可能)。これをドラッグしたファイルのパスごとに切り替えるのは難しい気がしますが。
たとえば、"C:\Documents and Settings\user\temp\file.txt" がドラッグされたファイルだとして、.....temp\までを切り出せればいいのでしょうが、コマンドでそこまでできるのかは私にはわかりません。
Wscript/Cscriptを使ってみるのはどうでしょう。
これは一種の言語ですので新たに学ばねばなりませんが。
投稿日時 - 2005-06-01 00:11:58
よく分からない場所がカレントフォルダになってしまうと思っていたのは環境変数のHOMEPATHだったんですね。
貴重な情報ありがとうございました。
また、.....temp\までの切り出しについてですが、deadlineさんの回答を参考に%~dp1で取得できました。
投稿日時 - 2005-06-01 00:57:54