• ベストアンサー

バッチファイル 文字列にスペースがある場合

for /f %%A in ('dir /b /s c:\a aa*.pdf') do copy "%%A" D:\ これはcドライブのa aaというフォルダ名の中を検索するコードですが、 フォルダ名にスペースがあるため、うまく動きません。 "a aa"のように""で囲ってみましたが、駄目でした。 どうすれば良いのか、教えていただきたいので、お願いします。

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

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

for /f %%A in ('dir /b /s c:\"a aa"\*.pdf') do echo copy "%%A" D:\ のようにecho でどのようなコマンドが実行されているか確認しましょう。 この記述ではdirコマンドで表示されるパスの中に空白があるため %%A には空白までの文字列しか代入されません。 以下のように修正して試してみてください。 for /f "delims=" %%A in ('dir /b /s c:\"a aa"\*.pdf') do copy "%%A" D:\

mk1234
質問者

お礼

回答ありがとうございました。 うまく行きました。

その他の回答 (2)

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

No.1 です。No.1 補足、了解です。 調べてるうちにNo.2 さんが回答されましたが せっかく書いたので投稿しておきます。内容はほぼ同じです。 dirコマンドが該当ファイルをみつけフルパスで1行ずつ返すのですが、(画面に現れない) フルパス中にスペースを含み、for がこれを区切りとみなしてしまうのが原因です。 for は区切り文字が、デフォルトでスペースとタブですが、オプション delims で変更できます。 以下のようにするといいでしょう。 for /f "delims=," %%A in ('dir /b /s "c:\a aa\*.pdf"') do copy "%%A" D:\ デリミタ(区切り文字)を , にしてます。スペース以外で他の意味を持たない文字なら何でもいいんですが。

mk1234
質問者

お礼

回答ありがとうございました。 delimsの意味が良く分かりました。 今回は回答が早かった方をベストアンサーにさせて頂きますが、貴殿の回答は、説明があって分かりやすかったです。

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

for 文の拡張機能は詳しくないのにナニですが、 何をしたいのかいまいち不明なので補足願います。 for により1コずつどのような文字列を取得し DO 以降に当て嵌めて実行するのが 正常な姿なのかシミュレーションできません。 >フォルダ名にスペースがあるため、うまく動きません。 ではフォルダ名をスペースなしに変更(バッチファイル内記述も)したら 期待通りに動作するのですか? >c:\a aa*.pdf の部分、aa と * の間に \ が要るようにも思われますし。 環境は同じとは限りませんが、当方では「ファイルが見つかりません」になりますし。

mk1234
質問者

補足

バッチファイルでの利用を考えています。 c:\a aa\*.pdf これが正解です。\が抜けてました。すみません。 スペースなしのフォルダ名aaaの場合は、期待通り作動します。 c:\a aaこれ以下にあるpdfファイルをサブフォルダ内も検索して、Dドライブにコピーするコードになります。