プロが教える店舗&オフィスのセキュリティ対策術

for /f %%A in ('dir /b /s c:\a aa*.pdf') do copy "%%A" D:\

これはcドライブのa aaというフォルダ名の中を検索するコードですが、
フォルダ名にスペースがあるため、うまく動きません。

"a aa"のように""で囲ってみましたが、駄目でした。

どうすれば良いのか、教えていただきたいので、お願いします。

A 回答 (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:\
    • good
    • 13
この回答へのお礼

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

お礼日時:2012/11/23 15:28

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:\

デリミタ(区切り文字)を , にしてます。スペース以外で他の意味を持たない文字なら何でもいいんですが。
    • good
    • 4
この回答へのお礼

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

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

お礼日時:2012/11/23 15:40

for 文の拡張機能は詳しくないのにナニですが、


何をしたいのかいまいち不明なので補足願います。

for により1コずつどのような文字列を取得し DO 以降に当て嵌めて実行するのが
正常な姿なのかシミュレーションできません。

>フォルダ名にスペースがあるため、うまく動きません。
ではフォルダ名をスペースなしに変更(バッチファイル内記述も)したら
期待通りに動作するのですか?

>c:\a aa*.pdf
の部分、aa と * の間に \ が要るようにも思われますし。

環境は同じとは限りませんが、当方では「ファイルが見つかりません」になりますし。

この回答への補足

バッチファイルでの利用を考えています。

c:\a aa\*.pdf これが正解です。\が抜けてました。すみません。

スペースなしのフォルダ名aaaの場合は、期待通り作動します。

c:\a aaこれ以下にあるpdfファイルをサブフォルダ内も検索して、Dドライブにコピーするコードになります。

補足日時:2012/11/23 11:26
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A