- ベストアンサー
バッチファイル 文字列にスペースがある場合
for /f %%A in ('dir /b /s c:\a aa*.pdf') do copy "%%A" D:\ これはcドライブのa aaというフォルダ名の中を検索するコードですが、 フォルダ名にスペースがあるため、うまく動きません。 "a aa"のように""で囲ってみましたが、駄目でした。 どうすれば良いのか、教えていただきたいので、お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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:\
その他の回答 (2)
- umamimi
- ベストアンサー率39% (144/362)
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:\ デリミタ(区切り文字)を , にしてます。スペース以外で他の意味を持たない文字なら何でもいいんですが。
お礼
回答ありがとうございました。 delimsの意味が良く分かりました。 今回は回答が早かった方をベストアンサーにさせて頂きますが、貴殿の回答は、説明があって分かりやすかったです。
- umamimi
- ベストアンサー率39% (144/362)
for 文の拡張機能は詳しくないのにナニですが、 何をしたいのかいまいち不明なので補足願います。 for により1コずつどのような文字列を取得し DO 以降に当て嵌めて実行するのが 正常な姿なのかシミュレーションできません。 >フォルダ名にスペースがあるため、うまく動きません。 ではフォルダ名をスペースなしに変更(バッチファイル内記述も)したら 期待通りに動作するのですか? >c:\a aa*.pdf の部分、aa と * の間に \ が要るようにも思われますし。 環境は同じとは限りませんが、当方では「ファイルが見つかりません」になりますし。
補足
バッチファイルでの利用を考えています。 c:\a aa\*.pdf これが正解です。\が抜けてました。すみません。 スペースなしのフォルダ名aaaの場合は、期待通り作動します。 c:\a aaこれ以下にあるpdfファイルをサブフォルダ内も検索して、Dドライブにコピーするコードになります。
お礼
回答ありがとうございました。 うまく行きました。