Q質問

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

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

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

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

A 回答 (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:\

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

    • good
    • 1

この回答へのお礼

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

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

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

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
    • 1

この回答へのお礼

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

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

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
    • 0

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

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

注目の記事

専門家に聞いてみた!縁日の焼きそばやたこ焼きをおいしく感じる理由

夏から秋にかけて開催されるお祭りで欠かせないものといえば、屋台ではないだろうか。焼きそばやわたあめなどを食べまくる人もいれば、金魚すくいや輪投げなど遊戯系を楽しむ人もいるだろう。そこで今回「教えて!go...

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報