
現在バッチファイルにファイルをドラッグ&ドロップするとそのファイルを処理するようなバッチを組もうとしています。
おおまかな流れとして
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
伝わりづらくて申し訳ございません。
宜しくお願い致します。
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
バッチパラメータがここまで詳細に指定できるとは驚きました。
とても参考になりました。
ありがとうございます。
尚、回答いただいた方の回答はどの回答もとても参考になったので回答をいただいた順にポイントを割り振らせていただきたいと思います。
貴重な回答をありがとうございました。
No.2
- 回答日時:
バッチファイル中でecho %1 を実行してみればドラッグ&ドロップしたファイルのパスは正しく表示されますね。
一方、バッチファイルをエクスプローラから起動したときのカレントディレクトリは、環境変数の HOMEPATHが使われると思います(echo %HOMEPATH% で確認可能)。これをドラッグしたファイルのパスごとに切り替えるのは難しい気がしますが。
たとえば、"C:\Documents and Settings\user\temp\file.txt" がドラッグされたファイルだとして、.....temp\までを切り出せればいいのでしょうが、コマンドでそこまでできるのかは私にはわかりません。
Wscript/Cscriptを使ってみるのはどうでしょう。
これは一種の言語ですので新たに学ばねばなりませんが。
よく分からない場所がカレントフォルダになってしまうと思っていたのは環境変数のHOMEPATHだったんですね。
貴重な情報ありがとうございました。
また、.....temp\までの切り出しについてですが、deadlineさんの回答を参考に%~dp1で取得できました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルvbaでdocuworksprinter...
-
エクセルVBAで一つ上の階層...
-
実行ファイルのパスを取得したい
-
【VBA】複数のtxtファイルから...
-
Excel 相対パス
-
xcopyコマンドの進行状況を表示...
-
VBA★PDFをPDFアプリで印刷し...
-
C#でのProcess.Startと変数path
-
コマンドプロンプトのコピー関...
-
開いているファイルを削除し、...
-
パスワード保護されたExcelファ...
-
ExcelVBAの使い方 ¥の使い方...
-
初心者powershellのPS1ファイル...
-
EXCEL(VBA)で指定フォルダ内の...
-
ExcelのVBAで上書き保存を確...
-
【VB.NET】App.configにファイ...
-
Pythonのバージョンに関する質...
-
アクセス 自身のデータベース...
-
リストボックスにファイル名の...
-
OleDbDataAdapterのエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルvbaでdocuworksprinter...
-
エクセルVBAで一つ上の階層...
-
xcopyコマンドの進行状況を表示...
-
Excel 相対パス
-
【VB.NET】App.configにファイ...
-
【VBA】ExcelマクロでCSVファイ...
-
エクセルのマクロで特定フォル...
-
実行ファイルのパスを取得したい
-
コマンドプロンプトのコピー関...
-
VBA★PDFをPDFアプリで印刷し...
-
VBAでパワーシェルを実行したい...
-
ExcelVBAの使い方 ¥の使い方...
-
C#でのProcess.Startと変数path
-
ExcelのVBAで上書き保存を確...
-
開いているファイルを削除し、...
-
アプリケーションのインストー...
-
【VBA】複数のtxtファイルから...
-
EXCEL(VBA)で指定フォルダ内の...
-
fopenでのパス指定
-
パスワード保護されたExcelファ...
おすすめ情報