バッチファイルでディレクトリ名を取得してフォルダを作成する方法

このQ&Aのポイント
  • バッチファイルでディレクトリ名を取得して、その名前で新しいフォルダを作成する方法について説明します。
  • また、フォルダ内の特定のファイルの場所や、別のフォルダにあるファイルをコピーする方法についても解説します。
  • 質問者の要望に応じて、可変するディレクトリの取得方法も詳しく説明します。
回答を見る
  • ベストアンサー

ディレクトリ名をファイル名するバッチファイル

ディレクトリ名を取得してその名称でフォルダを作るバッチファイルを考えています。 OSはWINDOWS XPです。 こういったディレクトリがあるとします。 111~444:名称が固定のディレクトリ bbb:名称が可変するディレクトリ mmm.bat、xxx.text:111フォルダと同じところにあるファイル 111┬222─bbb┬333─yyy.text    │        └zzz.text    │    └bbb┬333─yyy.text         └zzz.text mmm.bat xxx.text mmm.batを実行すると、111ディレクトリ以下のフォルダ名を取得し、 下記のようにフォルダを作成し、yyy.textの場所にbatファイルと同じ 所にあるxxx.textをコピーして差し替えるという動作をしたいのです。 (zzz.textは内容は違うが同じファイル名です) 444┬222─bbb┬333─xxx.text    │       └zzz.text    │    └bbb┬333─xxx.text        └zzz.text バッチコマンドで、ディレクトリ名を取得して空のフォルダを作る所までは 下記のようにできたのですが、 444┬222─bbb─333    │    └bbb─333 二つのzzz.textのコピー方法と、yyy.textの場所にxxx.textをコピーするにはbbbという可変するディレクトリを通らなければいけないのでその取得方法がわかりません。 分かる方は是非お教えください。 言葉が足りないところは補足もいたします。 よろしくお願いいたします。

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

  • ベストアンサー
  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.3

No.2 です。 失礼しました。記載ミスです。%~nxd ではなく %%~nxd に修正して下さい。 %%d --> 111\222\配下のパスとディレクトリ名が順に入ります(for文の変数) %%~nxd --> ~nxでパスのなかのディレクトリ名を取り出します。  ~n を間につけることでファイル名(今回はディレクトリ名)を取り出す  ~x を間につけることでファイル名の拡張子(今回はディレクトリ名の"."以降)を取り出す。 nやxなどの説明は for /? のヘルプの最後の方を参照してください。

jeaaaa1
質問者

お礼

補足のご回答ありがとうございました。 返信が遅くなり申し訳ありません。 質問の内容と違う問題に遭遇してしまい、 まだ試せていない状況です。

その他の回答 (2)

  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.2

jeaaaa1さんこんばんは。 例の図から、222ディレクトリの下には可変のbbbディレクトリしかないんですよね。 それならばmmm.bat のある場所がカレントディレクトリだとして、 for /d %%d in (111\222\*) do set bbb=%~nxd copy xxx.text 444\222\%bbb%\333\ copy zzz.text 444\222\%bbb%\ copy zzz.text 444\%bbb%\ とすればいかがでしょうか。

jeaaaa1
質問者

補足

ご回答ありがとうございます。 この記述を実行しましたが、 残念ながらcopyされませんでした。 記述の内容は何となく分かったのですが、 「%~nxd」の意味がわかりません。 お教え頂けないでしょうか。

回答No.1

特定のフォルダの配下から、特定のフォルダにファイルをコピーするのであれば Robocopyというツールがありますが如何でしょうか? フォルダも自動で作成してくれるので、意外と便利です。 回答になっていなければすみません。

jeaaaa1
質問者

補足

ご回答ありがとうございます。 このツールでも出来るかどうか検討してみます。

関連するQ&A

  • 1つ上の階層にフォルダを移動させるバッチファイル

    windows XPで下記のようなバッチファイルを作成したいです。 aaaフォルダ内にyyy.batと111フォルダがあり、111フォルダの中にbbbフォルダとcccフォルダがあるとします。なお、bbb、cccフォルダ内にはファイルが存在しています。 そしてaaa、bbb、cccの各フォルダの名称は可変します。 この状態でyyy.batにbbb、cccフォルダをaaaフォルダ内に移動させる(一つ上の階層に移動させる)バッチプログラムを作成したいと思っています。 どのようにすればいいのでしょうか。 お分かりの方、お教えいただけないでしょうか。 よろしくお願いいたします。

  • あるURLがファイルなのかディレクトリなのかが知りたい

    用語の使い方が不正確かもしれませんがご容赦下さい。 例えば、http://www.foobar.jp/xxx というURLがあった場合に、xxx の部分がファイルなのか、あるいはディレクトリなのか、あるいはスクリプトなのか、を知るにはどうしたらいいでしょうか? 現在、以下のようなプログラムを作成しています。 ・あるURLを指定する。 ・そのURLが指すページの内容を取得する。 ・そのページの中にあるリンクを全て取得する。 ・取得したリンクをフルパスに変換して出力する。 この際、 ・指定したURLがホスト名のみ ・指定したURLが / で終わっている ・取得したリンクがフルパス ・取得したリンクが / で始まっている ような場合は問題ないのですが、 ・指定したURLがホスト名のみでなく、かつ / で終わらず、かつ取得したURL が / ではじまらない といった場合は、どのようにフルパスを組み立てたらいいかがわかりません。 例えば、指定したURLが「http://www.foobar.jp/xxx」、取得したリンクが「yyy/zzz」のような場合、出力すべきフルパスは以下の2種類が考えられますが... http://www.foobar.jp/xxx/yyy/zzz http://www.foobar.jp/yyy/zzz 以上よろしくお願いします。

    • ベストアンサー
    • Perl
  • 要素名を表示させたい

    <data>   <aaa xxx="0">     <yyy zzz="1"/>     <yyy zzz="2"/>   </aaa>   <bbb xxx="0">     <yyy zzz="1"/>     <yyy zzz="2"/>   </bbb>   <ccc xxx="0">     <yyy zzz="1"/>     <yyy zzz="2"/>   </ccc> </data> 上のようなXMLから、XSLのvalue-ofなどを使って、 要素名aaa、bbb、cccを表示させるにはどう記述すればいいのでしょうか?

    • ベストアンサー
    • XML
  • バッチファイルでテキストファイルに列を挿入

    バッチファイルを用いて、大量のテキストファイルに先頭列を挿入し、かつファイル名をその先頭列にコピーできないかと考えております。 具体的には、 テキストファイルA XXX YYY ZZZ テキストファイルB XXY YYY ZZZ のようになっているものを、 テキストファイルA AXXX AYYY AZZZ テキストファイルB BXXX BYYY BZZZ といった形に変換したいです。 プログラムに関しては初心者です。 具体的なプログラムの内容を教えていただける方がいらっしゃいましたらよろしくお願いいたします。

  • ファイルアップローダ+複数のディレクトリを削除するシステムについて

    以下のようなフォルダ構成で、複数のディレクトリを削除するシステムを構築しよと しましたが、1ディレクトリのみしか削除できませんでした。 20090601 - xxx1.txt yyy1.txt zzz1.txt のフォルダ20090601と、ファイルxxx1.txt,yyy1.txt,zzz1.txt のみしか削除できませんでした。理想は、すべてのディレクトリ、ファイルを削除しようと、試行錯誤 しましたが、なかなかうまくいきません。 わかる人がいたら、ご教授のほどよろしくお願いします。 ============フォルダ構成==================================== 20090601 - xxx1.txt yyy1.txt zzz1.txt 20090602 - xxx2.txt yyy2.txt zzz2.txt 20090603 - xxx3.txt yyy3.txt zzz3.txt 20090604 - xxx4.txt yyy4.txt zzz4.txt $_WK_dir_name[1] = "20090601" $_WK_dir_name[2] = "20090602" $_WK_dir_name[3] = "20090603" $_WK_dir_name[4] = "20090604" ============プログラム====================================== // ファイルアップロード処理 (省略) // ディレクトリ数のカウント処理 (省略) // ディレクトリとディレクトリの中身を削除 for ($i = 1; $i < 4; $i++) { // 削除するディレクトリパスを設定 $_dir_path = './' . $_WK_dir_name[$i] . '/'; printf("★1"); // ディレクトリ・ハンドルをオープン $res_file = opendir( $_dir_path ); printf("★2"); // ディレクトリ内のファイル名を1つずつを取得 while( $file_name = readdir( $res_file ) ){ // ファイルかどうか判定する if (is_file($_dir_path . $file_name)) { unlink($_dir_path . $file_name); } } printf("★3"); closedir( $res_file ); printf("★4"); rewinddir( $res_file ); printf("★5"); // ディレクトリの中身が空になったところで、ディレクトリを削除する。 rmdir($_WK_dir_name[$i]); printf("★6"); } ============================================================

    • ベストアンサー
    • PHP
  • URLからディレクトリ構造をテキストとして取り出す方法

    URLからディレクトリ構造をテキストとして取り出す方法 たとえば http://www.xxx.com/xxx/yyy/zzz/ といったパスから、 自動的に http://www.xxx.com ├─xxx │ ├─yyy │ │ ├─zzz のようなツリーテキストを自動的に生成する方法や ツールはありませんか。 意味不明でしたら加筆しますのでよろしくお願いします。

  • ExcelのVBAでの複数階層からのフォルダ名の取得

    ExcelのVBAでの複数階層からのフォルダ名の取得 下記階層に対して以下の処理をExcelのVBAで行うにはどしたら良いか、 申し訳ありませんが、どうか教えて頂きたく思います。 C:\test1   ├\aaa\ddd   │   ├\xxx1\   │   └\yyy2\   │   ├\bbb\ddd   │   └\xxx3\   │   │   └\ccc\ddd       ├\xxx4\       ├\xxx5\       └\zzz6\ 1 C:\test1を指定する 2 1で指定した中にある各\dddフォルダ内にあるフォルダ名を順に取得する 3 2で取得したフォルダ名をExcelのSheet1のA1から順に書き出す Excel   A    B    C    D    E 1 xxx1 2 yyy2 3 xxx3 4 xxx4 5 xxx5 6 zzz6 7 8 9  Sheet1 Sheet2 Sheet3 勉強不足で申し訳ありません。 どうぞ宜しくお願い致します。

  • ファイル名のリネームとコピーを問合せ形式で行いたい

    よろしくお願いします。 ファイル名のリネームとコピーをDOSコマンドで問合せ形式で行うBATを作りたいのですが、作り方を教えて頂きたく質問をさせて頂きます。 実行環境は「Windows Server 2008 R2」です。 やりたいことは、 (1)BATをDOSプロンプトで起動 (2)「リネームするファイルのディレクトリを選択してください」と聞いてきて、番号が付いたディレクトリの一覧(固定で3個)が画面に表示されて、番号で指定。 (3)「リネーム前のファイル名を選択してください」と聞いてきて、番号が付いたファイルの一覧(固定で10個)が画面に表示されて、番号で指定。 (4)「リネーム後のファイル名を入力してください」と聞いてきて、ファイル名を入力。 (5)「xxxをyyyにリネームします。よろしいですか?」と聞いてきて、「はい」ならリネームを実行、「いいえ」なら(2)に戻る。エラーならBAT終了。 (6)「リネームを繰り返しますか?」と聞いてきて、「はい」なら(2)~(5)を繰り返し、「いいえ」なら(7)へ。 (7)「コピー元のディレクトリを選択してください」と聞いてきて、番号が付いたディレクトリの一覧(固定で4個)が画面に表示されて、番号で指定。 (8)「コピー元のファイル名を選択してください」と聞いてきて、番号が付いたファイルの一覧(固定で10個)が画面に表示されて、番号で指定。 (9)「コピー先のディレクトリを入力してください」と聞いてきて、番号が付いたディレクトリの一覧(固定で4個)が画面に表示されて、番号で指定。 (10)「xxxをyyyにコピーしますよろしいですか?」と聞いてきて、「はい」ならコピーを実行、「いいえ」なら(7)に戻る。エラーならBAT終了。 (11)「コピーを繰り返しますか?」と聞いてきて、「はい」なら(7)~(10)を繰り返し、「いいえ」ならBAT終了。 初心者レベルではこのようなBATが作成できずに困っております。 どうぞ、よろしくお願いします。

  • delphi5でのディレクトリ内ファイル名の取得

    こんにちは。質問があります。 delphiのアプリケーションであるディレクトリのフォルダ内のファイルを 別のディレクトリのフォルダ内に名前を変えてコピーしようと考えています。 基本的にコピー元のディレクトリ名はわかりません。 コピー先のディレクトリは存在しなければ、名前を指定して作成し、その中に名前を変更したファイルを格納する流れです (わかりづらいかも・・・) フォルダが存在しなければ作成したり、ファイル名を変更してコピーする のはわかったのですが、コピー元のディレクトリ内のファイル(もしくはディレクトリ)名を取得することがわかりません。 全てソースの中でプログラムしたいと考えています。(VCLは使用しない) こんなんでもわかっちゃったりする方がいらっしゃいましたら、 どうか愛の手を・・・

  • DOSのバッチファイル

    恐れ入ります、以下のバッチファイルを作成したいです。  E:\XXX\abc.dll C:\XXX\  E:\YYY\abc.dll C:\YYY\  E:\ZZZ\abc.dll C:\ZZZ\ ・コピー元には、abc.dllが必ずあります。 ・コピー先には、abc.dllが既に存在している可能性が大きいです。有れば強制的に上書きしたいです。 ・バッチファイルをダブルクリックしたら上記を実行して、実行した内容が表示されるようにしたいです。 お時間ある方で上記の方法がおわかりになりお時間ある方がいらっしゃりましたら教えて頂ければ幸いです。 以上、何とぞよろしくお願いいたします。

専門家に質問してみよう