• ベストアンサー

DOSコマンドについて質問させてください。

Dir02~Dir07の中に*.zipファイルが存在します。 *zipファイルの有無を検索して、*.zipファイルがあれば[Dir01]の中にその*.zipファイルを移動するバッチファイルはどのように書けばいいでしょうか? Dir01からバッチファイルを実行するようにしたいです。 [Dir01]-[Dir02]     -[Dir03]     -[Dir04]     -[Dir05]     -[Dir06]     -[Dir07] 以上、よろしくお願いいたします。

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

  • ベストアンサー
  • umamimi
  • ベストアンサー率39% (144/362)
回答No.7

No.5,6 です。 No.6お礼欄 >この方法だと最初の1つのフォルダの中のZIPファイルだけ移動できました。 >ただ、ほかのフォルダの中のZIPファイルは移動しません。 変ですね。デスクトップでも確認できましたが... >デスクトップ上に日本語のフォルダ名にしているのが問題なのでしょうか。。。 特に問題ないと思いますが。 展開される時に文字数がかなり長いとかではないですよね。 フォルダ名やファイル名にスペースを含み、それが move コマンド以下に現れるようだと うまくないので、"" で括る必要があります。 これでいいと思います。 for /d %%a in (*.*) do move "%%a\*.zip" 何のエラーが出てるか確認するには、バッチファイルの最後の行に pause を追加してDOS窓を閉じる前に止めさせ、画面表示を読むといいです。 以下はその表示例(成功の場合)です。 >C:\Documents and Settings\Administrator\デスクトップ\sub1>for / %a in (*.*) do m >ove "%a\*.zip" > >C:\Documents and Settings\Administrator\デスクトップ\sub1>move "sub2\*.zip" >C:\Documents and Settings\Administrator\デスクトップ\sub1\sub2\txt2.zip > >C:\Documents and Settings\Administrator\デスクトップ\sub1>move "sub3\*.zip" >C:\Documents and Settings\Administrator\デスクトップ\sub1\sub3\txt3.zip > >C:\Documents and Settings\Administrator\デスクトップ\sub1>move "sub4\*.zip" >C:\Documents and Settings\Administrator\デスクトップ\sub1\sub4\txt4.zip > >C:\Documents and Settings\Administrator\デスクトップ\sub1>pause >続行するには何かキーを押してください . . . >この方法が無難なのでしょうか? for コマンドなど使う時は展開される内容を推測しますが時々「読み間違える」 (想像が足りない)場合があり、テストやデバグが必要になってきたりしますので。 そういうのが手間だとか時間かけてられないとかなら、エクセルのオートフィルを利用するなどして コマンド数が増えようが間違えにくい方法を取る方がよい、という見方もアリだと思います。

megumi19910715
質問者

お礼

大成功です!ありがとうございました。 ベストアンサーにさせて頂きました。 本当にありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (6)

  • umamimi
  • ベストアンサー率39% (144/362)
回答No.6

ご存知かと思いますが念の為。 No.3 の記述は、コマンドプロンプトで使うならそのままでOKですが、 バッチファイル内に記述して使うなら %a は %%a と書いてください。 バッチファイルを実行する時は %% が % に置換されるので % を 2個続けて書いておく必要があります。

megumi19910715
質問者

お礼

この方法だと最初の1つのフォルダの中のZIPファイルだけ移動できました。 ただ、ほかのフォルダの中のZIPファイルは移動しません。 for /d %%a in (*.*) do move %%a\*.zip よろしくお願いします。

すると、全ての回答が全文表示されます。
  • umamimi
  • ベストアンサー率39% (144/362)
回答No.5

>どのようにすればフォルダを1つずつ書くこと無く for 文で /d と (*.*)を使うとフォルダのみを拾えます。 カレントフォルダを \Dir01 にして for /d %a in (*.*) do move %a\*.zip でOKです。 上書き確認は "/-y"を追加し、以下のように。 for /d %a in (*.*) do move /-y %a\*.zip 動作確認済み。

megumi19910715
質問者

お礼

なぜか動きません。 デスクトップ上に日本語のフォルダ名にしているのが問題なのでしょうか。。。 とりあえず、エクセルで001で記載したものをドラッグして1000個作ってバッチファイルを動かすと問題なく全部移動することができました。 この方法が無難なのでしょうか?

すると、全ての回答が全文表示されます。
  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.4

そうですね。 では move *\*.zip ./ どうでしょう

megumi19910715
質問者

お礼

ありがとうございます。 この方法でバッチファイルは動きませんでした。 今のところ下記のように記載すれば意図するように動きます。 move Dir002\*.zip . move Dir003\*.zip . move Dir004\*.zip . 恐れ入ります、どのようにすればフォルダを1つずつ書くこと無くバッチファイルを動かすことができるのでしょうか。 よろしくお願いします。

すると、全ての回答が全文表示されます。
  • okgoripon
  • ベストアンサー率44% (1141/2548)
回答No.3

余計なお世話かもしれませんが、一応。 「Dir01からバッチファイルを実行」して「[Dir01]の中にその*.zipファイルを移動」するということですが、ANo.1の方のコマンドでは移動先が「Dir01の1つ上のディレクトリ」になってしまいます。 例えば、C:\Dir00\Dir01に質問のディレクトリ構造を作って実行したとすると、ANo.1の場合の移動先はC:\Dir00、私の場合はC:\Dir00\Dir01です。 念のため。

すると、全ての回答が全文表示されます。
  • okgoripon
  • ベストアンサー率44% (1141/2548)
回答No.2

いや、単に move Dir02\*.zip . move Dir03\*.zip . move Dir04\*.zip . move Dir05\*.zip . move Dir06\*.zip . move Dir07\*.zip . でいいのでは? 途中zipファイルの含まれないフォルダではエラーが表示されますが、目的は達成できるはずです。 ただし、同名のzipファイルが複数のフォルダに含まれていた場合、そのまま移動されるのは最初の1つだけで、2つ目以降は上書き確認のメッセージが表示されて一旦止まります。 質問にはその条件が記載されていなかったので、問題無いと判断しましたが。

megumi19910715
質問者

お礼

早速の返信ありがとうございました! すみません、それでフォルダーが1000個ほどあるので、1つ1つ記載するのが大変なのですが、その場合どのようにバッチファイルをつくればいいでしょうか? 恐れ入りますがよろしくお願いいたします。

すると、全ての回答が全文表示されます。
  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

move Dir02\*.zip ../ move Dir03\*.zip ../ move Dir04\*.zip ../ move Dir05\*.zip ../ move Dir06\*.zip ../ move Dir07\*.zip ../ でいいかな

megumi19910715
質問者

お礼

早速の返信ありがとうございました! すみません、それでフォルダーが1000個ほどあるので、1つ1つ記載するのが大変なのですが、その場合どのようにバッチファイルをつくればいいでしょうか? 恐れ入りますがよろしくお願いいたします。

すると、全ての回答が全文表示されます。

関連するQ&A