• ベストアンサー

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

  • バッチファイルについて

    バッチファイルで複数起動する時に フォルダー名のフルパスが必要ですよね?? 参照 start "" "C:\Documents and aaaa\root\デスクトップ\aaaa\aaaa.bat" これのaaaa.batより以前を自動で拾いたいのですが可能ですか?? また拾ってきて aaaa.batとどうやって引っ付ければ start "" "C:\Documents and aaaa\root\デスクトップ\aaaa\aaaa.bat" ココに指定できますか?? 初心なもので、質問がおかしいと思いますが、宜しくお願います。

  • バッチファイルでCOPYができない。

    バッチファイルを作成するのが初めてでしてうまくいきません。 copy /Y "C:\Documents and Settings\(ユーザー名)\test.txt" sample\ というコードを実行してみたんですが、 C:\Documents and Settings\(ユーザー名)>copy /Y "C:\Documents and Settings\(ユーザー名)\test.txt" sample\ だとできて、 C:\Documents and Settings>copy /Y "C:\Documents and Settings\(ユーザー名)\test.txt" sample\ だとできません。 (実行する場所によって違うということです) どこで実行してもできるようにしたいのですがどうすればよろしいですか?

  • C#からバッチファイルを起動で

    C#からバッチファイルを起動しているのですが、 パス名にブランクがあると、cdコマンドがうまく動きません。 ブランクがないと動きます。 例:C:\Documents and Settings\user\My Documents\ バッチファイルを""で囲んでみたのですが、 うまく動きませんでした。 原因が分かれば教えて下さい。 よろしくお願い致します。 C#部分 --------------------------------------------------------------------------------- string strJarPath = Properties.Settings.Default.JarPath; ProcessStartInfo psInfo = new ProcessStartInfo(); psInfo.FileName = Application.StartupPath + @"\" + "cmdExe.bat"; psInfo.Arguments = strPath psInfo.CreateNoWindow = true; psInfo.UseShellExecute = false; psInfo.RedirectStandardOutput = true; Process p = Process.Start(psInfo); --------------------------------------------------------------------------------- ※Properties.Settings.Default.JarPath には、  C:\Documents and Settings\user\My Documents\java を設定 バッチファイル部分 ---------------------------------------------------------------------------------- @echo off cd "%1" java -cp test.jar Hello ---------------------------------------------------------------------------------

  • フルパスの中にワイルドカードを使いたい

    ファイル削除のバッチファイルを作成しているのですが、フルパスの中でワイルドカードを使用したいのですが、可能でしょうか? 例として、 C:\Documents and Settings\user\デスクトップ\abc\test.txt C:\Documents and Settings\user\デスクトップ\edf\test.txt C:\Documents and Settings\user\デスクトップ\gh\test.txt を削除させたいです。 別の場所に同名のテキストファイルがあり、それは消したくないので、「*test.txt」とはしたくないです。 試しに下記のようにワイルドカードを使用してみたところNGでした。 del "C:\Documents and Settings\user\デスクトップ\*\test.txt" よろしくお願いします。

  • エクセル VBA バッチが動かない。

    以下のVBAを試行錯誤の末(未熟なもので・・) 作ってみました。 デスクトップ上のフォルダを確認にて、存在する場合はそのままバッチ実行、 存在しない場合はフォルダを作成してバッチ実行。 というものなのですが、フォルダが存在する場合はすんなり行くのですが、 存在しない場合、フォルダを作成した後、バッチ処理がされなくて 困っています。どこが悪いのでしょうか? 是非ご教授お願いいたします。 ちなみにバッチはXCOPYです。 Sub SET_Original() Dim strPATHNAME As String strPATHNAME = "C:\Documents and Settings\ユーザー\デスクトップ\フォルダ" If StrConv(strPATHNAME, vbUpperCase) = "FALSE" Then Exit Sub If Dir(strPATHNAME, vbDirectory) = "" Then MsgBox "フォルダは作成します。", vbExclamation MkDir "C:\Documents and Settings\ユーザー\デスクトップ\フォルダ" Exit Sub End If Dim str As Variant str = Shell("c:\Documents and Settings\ユーザー\デスクトップ\copy.bat") End Sub

  • 複数のPCへファイルをコピーするバッチを作成したい

    WEBページへのショートカットを複数のPCへコピーするbatファイルを作成してみたのですがどうもうまくいきません。どのように記述したらよいでしょうか? 以下自分で作成してみたbatファイル xcopy "C:\テスト結果.url" "\\0001PC\C:\Documents and Settings\user\デスクトップ" /y /e ・ ・ ・ xcopy "C:\検査結果.url" "\\0100PC\C:\Documents and Settings\user\デスクトップ" /y /e また、コピー先のコンピュータ名を変数に代入する方法があれば教えてください。

  • バックアップをバッチファイルでしたいのですが・・

    バッチファイルを作成して、バックアップを取る方法を考えています。 Cドライブのフォルダ内のあるフォルダを 外付けハードにバックアップする方法です。 XCOPY C:\C:\Documents and Settings\ユーザー名\*.* F:\Documents and Settings\ユーザー名\/S/D/Y と作成しましたが、うまく動きません。 どこが間違っているのでしょうか? また、本当は、外付けハードではなく、 同じストレージ内にバックアップを取れたらいいなって思ってます。 具体的には、CドライブもDドライブも バックアップはDドライブの『bkup』というフォルダに保存できたらな・・・と。 しかし、そのバッチファイルを作成しても なぜかうまくいきません。 こういうのは無理なのでしょうか? 初心者なもので、わかりやすく教えて頂きたいです。 宜しくお願いします。

  • バッチファイルの親フォルダを取得するには

    WindowsのDOSコマンドを用いたバッチファイルで、バッチファイルと同じフォルダにある実行ファイルを起動したいのですが、どのようにするのがよいのでしょうか? 実行ファイルのファイル名は既知で固定なので、バッチファイルの親フォルダが取得できれば、連結して起動すればよいです。 しかし、バッチファイルの親フォルダの取得方法が分かりません。 カレントフォルダは%CD%で取得できるのですが、バッチファイルの親フォルダがカレントフォルダとは限りません。 バッチファイルのフルパスは%0で取得できるのですが、そこからフォルダ部のみを抽出する方法が分かりません。 よろしくお願いします。

  • デスクトップ上の全ファイル取得

    開発環境 WindowsXP,SP2 Visual Studio 2005 VC++ SDK SHGetFolderPath()でデスクトップのパスを取得した後、FindFirstFileによってデスクトップ上の全ファイル及びディレクトリの名前を取得したいと考えております。 SHGetFolderPathで取得したパスは、 C:\Documents and Settings\...\デスクトップ となっており、この文字列をwsprintfで次のように加工しました。 wsprintf(output,"%s\\*.*","C:\Documents and Settings\...\デスクトップ"); このoutputをFindFirstFile,FindNextFile,FindCloseを組み合わせたプログラムでディレクトリ内の全てのファイル及びディレクトリの名前を取得しています。 このプログラムは普通(?)のディレクトリでは有効で、こちらの期待通りの動きをしてくれるのですが、取得したデスクトップのパスを渡すと、デスクトップフォルダ内にはデスクトップという名前のフォルダしかないと出力されます。以下のような感じです。 調査ディレクトリ:C:\Documents and Settings\...\デスクトップ 調査結果 "C:\Documents and Settings\...\デスクトップ"ディレクトリ内のファイル及びディレクトリ:デスクトップ これはWindowsの仕様の動作なのでしょうか。 特殊フォルダであるデスクトップは、FindFirstFileでは調査出来ないのでしょうか? 他に方法はありますか? どうか教えてください。

  • カレントディレクトリ配下のフォルダパス取得方法

    現在バッチを作成しているのですが、 バッチファイルのカレントの下にあるフォルダのパスを 変数に格納し使用する方法を探しています。 構成としましては バッチフォルダ(C:\batch)の中に test.bat  folder1 folder2 の3つが格納されている状態を想定しています。 このfolder1とfolder2のファイルパスの取得方法を探しています。 ファイル名は不定であり、直接名前を指定する事が出来ないため 変数に格納しバッチ処理で使用したいと考えています。 環境はWindowsXPです。 何か上手い方法がありましたらお教え下さい。 以上です。よろしくお願いします。

専門家に質問してみよう