質問

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

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

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

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

通報する

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

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

この回答へのお礼

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

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

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

この回答へのお礼

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

for 文の拡張機能は詳しくないのにナニですが、
何をしたいのかいまいち不明なので補足願います。

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

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

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

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

この回答への補足

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

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

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

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

このQ&Aは役に立ちましたか?0 件

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

新しく質問する

注目の記事

フリーアナウンサー長谷川豊氏の新コーナー「このニュースどう思います?」がスタート!

元フジテレビのフリーアナウンサー長谷川豊氏から気になるニュースについておしトピの皆さんに質問します! 皆さんの意見をもとに長谷川豊氏がコラムを執筆します! アプリリリース記念として最大1万分のアマゾンギフト券プレゼントキャンペーンも実施中!

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


新しく質問する

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

毎日見よう!教えて!gooトゥディ

べんりQ&A特集