• ベストアンサー

コマンドでのファイルの移動

aaフォルダの中に複数のフォルダがあり、その複数フォルダの中のファイルをすべてbbフォルダに移したいのですが・・・・ for /f %a in ('dir D:\aa /b') do xcopy /d D:\aa\%a\* D:\bb\ とすると、aaの中のフォルダで、フォルダ名が半角スペースを含むものは移動の対象となってくれません。(>_<) 「てす と」フォルダは「てす」として判断され、中のファイルは そのまま残ってしまいます。 どのようにすればうまくいけるのでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.3

for /f %a in ('dir D:\aa /b') では、「%a」に入るものが、フォルダ名の先頭から最初のスペースまでになってしまうようですね。 for /d %a in (D:\aa\*.*) do xcopy /d "%a"\*.* d:\bb で、「%a」に「D:\aa\」以下のサブフォルダ名が順次入ります。 「%a」に入るパス名は、「D:\aa\」から始まるフルパス名で、半角スペースが含まれていても二重引用符では括られていませんから、xcopyコマンドのパラメータに指定する際に、「%a」を二重引用符で括ります。

ton77
質問者

お礼

有難うございます!!希望通りになりました!感激です。 見ず知らずなのに丁寧に教えて頂き本当にありがとうございました。 また何かありましたらよろしくお願いします!!

その他の回答 (7)

  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.8

To:No.#7 お節介かもしれませんが、コマンドラインの解説が必要なようですね。 for /f %a in ('dir D:\aa /b') do xcopy /d D:\aa\%a\* D:\bb\ 質問者の方が↑のコマンドラインで意図しているのは、"D:\aa"フォルダ下のサブフォルダ内にあるファイルの中で、"D:\bb"フォルダにある同名ファイルよりも『更新日時の新しいファイルだけ』を、『フォルダ構造はコピーせず』に、上書きコピーするというものです。("D:\bb"フォルダに存在しないファイルもコピーされます。) そのようなわけで、リネームでは対応出来ませんし、エクスプローラからの単純なコピーでも出来ません。 ANo.#6の方の回答通知メールが届きませんから、多分、冒頭の部分が問題視されて、審査対象になっているんだろうと思いますョ。禁止事項ですから。この回答も削除対象かも・・・。 ■指摘回答 その内容に間違いや錯誤があると思われることなどについてことさらに指摘したり、批評・批判する回答は、削除・編集の対象とさせていただきます。 http://help.okwave.jp/okwave/beginner/prohibition.html

  • kiwa67
  • ベストアンサー率22% (82/357)
回答No.7

#4 です。 ちょっと疑問に思いまして、 >回答No.4、No.5は無視しましょう。どちらも、ご質問の文中に >あるDOSコマンドの意味を理解していない回答なので。 ここのスレッドは、for do にこだわったスレですか? もともとの要求が  > aaフォルダの中に複数のフォルダがあり、その複数フォルダの中の  > ファイルをすべてbbフォルダに移したいのですが・・・・ だったので、別案での解決方法もありかと思いました。

  • rioworks
  • ベストアンサー率41% (19/46)
回答No.6

回答No.4、No.5は無視しましょう。どちらも、ご質問の文中にあるDOSコマンドの意味を理解していない回答なので。 for /? で、ヘルプを表示すると、長ったらしい説明の中に、 >空白で区切られた最初のトークンを渡します。空白行はスキップされます。 >既定の解析動作を変更するには、オプションの "オプション" パラメータを指定します。 とあるように、 for /f %a in ('dir D:\aa /b') では、 dir D:\aa /b の出力の各行の先頭から最初の空白までしか%aに入りませんので、"delims=区切り文字"オプションを使って、空白を区切り文字として認識しないように指定する必要があります。(空白を無視するには、"delims="と区切り文字を何も指定しない形式を使います。) for /f "delims=" %a in ('dir D:\aa /b') do xcopy /d D:\aa\"%a"\* D:\bb\ (xcopyコマンドの%aは二重引用符で括ってください。) 上のコマンドでも、D:\aaフォルダ内にサブフォルダしかなければ問題はありませんが、サブフォルダとファイルが混在していると、その後のxcopyコマンドがエラーになってしまいます(%aにファイル名が入いると、ファイル名\*を指定することになるので)ので、dirコマンドで/a:dオプションを指定して、フォルダ名だけを出力するようにした方が良いと思います。 for /f "delims=" %a in ('dir D:\aa /a:d /b') do xcopy /d D:\aa\"%a"\* D:\bb\ 回答No.3の for /d %a in (D:\aa\*.*) do xcopy /d "%a"\*.* d:\bb の方が簡単だと思ったりしますが、forコマンドの/fオプションの使い方ということで、ご参考になれば。

ton77
質問者

お礼

有難うございます! 教えて頂いたコマンドでばっちりです!! より詳しく教えて頂き勉強になりました。 本当にありがとうございました。

  • SEWANIN
  • ベストアンサー率34% (203/592)
回答No.5

  ton77 様  敢えてDOSコマンドをお使いにならなくても  「aaフォルダ」下の「複数のフォルダ」にある  ファイルを全て選択なさいました上、切り取って  「bbフォルダ」に貼り付けられればご希望の  ようにお出来になると思います。  お試し済みのことでしたらご容赦願います。

  • kiwa67
  • ベストアンサー率22% (82/357)
回答No.4

bb が存在しないフォルダなら   rename aa bb で、できますが。。。。。

  • chiezo2005
  • ベストアンサー率41% (634/1537)
回答No.2

パラメータを使うとややこしくなるので, 単純にxcopyのサブディレクト以下をコピーするオプションを使って xcopy D:\aa\* D:\bb\ /E /S で一発でできると思いますが・・

ton77
質問者

補足

有難うございます。そのままやってしまうとbbの中にフォルダごと移ってしまいます・・・。aaの中の複数フォルダの中身のファイルだけを bbに移したいです。 よろしくお願いいたします

  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.1

for /f %a in ('dir D:\aa /b') do xcopy /d D:\aa\"%a"\* D:\bb\ xcopyのパラメータの「%a」を二重引用符で括ってください。

ton77
質問者

補足

有難うございます。それも試してみたのですが、なぜかダメなんです。 具体的に言うとaaフォルダの中に「The Beatles」というフォルダが あり、その中に「Something.m4a」という曲ファイルがあるのですが、 実行すると D:\>xcopy /d D:\aa\"The"\* D:\bb\ ファイルが見つかりません - * 0 個のファイルをコピーしました となり、”The”だけになってしまいます・・・。 よろしくお願いいたします。

関連するQ&A