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

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

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

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

このQ&Aに関連する最新のQ&A

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
    • 9
この回答へのお礼

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

お礼日時: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に関連する人気のQ&A

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

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

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

このQ&Aと関連する良く見られている質問

Qスペースを認識させての検索

gooなど、検索エンジンを利用する際に、スペースを使うと、AND検索(複数キーワード検索)になってしまいます。
人名などで検索する際に、スペースとして認識させて検索をしたい際に、利用できる方法はないのでしょうか?
いろいろと調べる際に、通常の単語と人名が似ている際など、検索がうまくいかないときがあります。通常ネット上では、人名はスペースで区切られて掲載されておりますので、スペースが検索できると、非常に便利になります。
ご存知の方、お教えください。

Aベストアンサー

Googleに限れば
半角スペースを含む文字列を""で囲むとAND検索にはならず、囲まれた文字列を検索します。

Qバッチ for /f 空白、スペースが入っていると消せません・・・

お知恵のある方、教えて下さいませ。
現在、会社でバッチを作成しているのですが、過去ログを参照しても、
出来ないので相談させて下さい。
OS:Windows2000
概要:
1、コピー元からコピー先へXCOPYし、
2、そのコピーして来たものの中に「CVS」という文字列が
含まれる物は全て削除
問題点:過去ログにもあったのですが、
ファイル名にスペースが入っていると、for /f は空白タブ区切りで
先頭の一語だけを読み取りファイルを認識してくれない状態です。

ソース:
set cSource_dir="C:\aaa\bbb\ccc"
set cBackup_dir="C:\ddd\eee"
xcopy /y /e /i /h /r %cSource_dir% %cBackup_dir%
dir /a /b %cBackup_dir%> bbb.txt
find /i "cvs" bbb.txt > aaa.txt
for /f "skip=2 delims= " %%A in (aaa.txt) do call :MAIN %%A

:MAIN
set filename=%1
if exist %filename% del /f /a /s %filename%

上記の式ですと、
コピー~cvs2.txtの様に半角スペースが無い場合は
削除出来るのですが、
コピー ~ cvs4.txtの様に、半角スペースが複数ある場合、
どうしても削除が出来ません・・

どなたか、助けて頂けませんかm(__)m
宜しく御願いします。

お知恵のある方、教えて下さいませ。
現在、会社でバッチを作成しているのですが、過去ログを参照しても、
出来ないので相談させて下さい。
OS:Windows2000
概要:
1、コピー元からコピー先へXCOPYし、
2、そのコピーして来たものの中に「CVS」という文字列が
含まれる物は全て削除
問題点:過去ログにもあったのですが、
ファイル名にスペースが入っていると、for /f は空白タブ区切りで
先頭の一語だけを読み取りファイルを認識してくれない状態です。

ソース:
set cSource_dir="C:\aaa\bbb\c...続きを読む

Aベストアンサー

> for /f "skip=2 delims=" %%A in (%cDir_temp%) do call :MAIN %%A

ここ、:MAIN の後ろの %%A が括られてませんけど
写し間違いではないのですね?
であれば、ここも括ってみてはどうなりますか?

QWord2007の全角文字、全角スペースの検索方法

またまた質問申し訳ありません。
Word2007の書類で、全角文字、全角スペースが混じってて、これらを検索して特定したいのですが、
やり方がいまいちわかりません。
過去の質問から、[!0-9a-zA-Z]を入力すれば半角文字以外を検索できるみたいですが、
半角のスペースやコンマを検索してしまいます。
これらの半角スペースやコンマを検索したくないのですが、検索からはずすにはどうすればよいでしょうか?

Aベストアンサー

[ホーム」タブの編集の[検索]を指定して、検索ダイアログを表示します。
検索する文字列に全角スペースを入力します。
[オプション]をクリックし、「あいまい検索」のチェックを外し、半角と全角を区別するにチェックをします。
[検索された項目の強調表示]をクリックし、「すべて強調表示」をクリックすると、全角スペースだけが緑色の蛍光ペンを指定したような状態で表示されます。
[次を検索]で全角スペースだけ一か所ずつ検索もできます。
 
質問は、スペースだけではなくて、全角文字だけを検索したいということでしょうか?
特定の全角文字なら意図はわかるのですが、すべての全角文字を検索というのは、意味が良くわからないのですが・・・
ワイルドカードを使えばできなくはないですが、質問内容からは意図が今一つ分かりません???
 

Qバッチファイル For 文 スペース

いつも大変御世話になっております。

WindowsXP環境下の
【D:\test】フォルダ直下に TEST.conf というファイルがあり
中身は1行こんな文があります。↓

test001=12345 6

そして
【D:\test\bat】フォルダ直下に TEST.bat というファイルがあり
中身のードはこんなコードです。↓

For /F "tokens=1*" %%i in (..\TEST.conf) do set %%i
SET IN_FILE=%test001%


実行結果は

SET IN_FILE=12345 になりました。

なぜ
SET IN_FILE=12345 6
ではないのですか?

スペースを _ (アンスコ)など何か入れてあげると
SET IN_FILE=12345_6

上記バッチファイルのFor文では、スペース手前までしか見てくれないのでしょうか?
他に方法は無いのでしょうか?

もしご存知の方がいらっしゃるようでしたら、お手数ですが
実現可能かどうかをご回答願いますでしょうか?

以上、何卒宜しくお願い致します。

いつも大変御世話になっております。

WindowsXP環境下の
【D:\test】フォルダ直下に TEST.conf というファイルがあり
中身は1行こんな文があります。↓

test001=12345 6

そして
【D:\test\bat】フォルダ直下に TEST.bat というファイルがあり
中身のードはこんなコードです。↓

For /F "tokens=1*" %%i in (..\TEST.conf) do set %%i
SET IN_FILE=%test001%


実行結果は

SET IN_FILE=12345 になりました。

なぜ
SET IN_FILE=12345 6
ではないのですか?

スペースを _ (アンスコ)など何か入れてあげる...続きを読む

Aベストアンサー

スペースが語の区切りだからです。区切り文字はdelims=で変更出来ます。詳しくは for /? を。

Qスペースを含むファイル名の検索

 Windows98で「スタートメニュー」-「検索」でスペースを含むフォルダ名(ms dos等)を検索したいのですが
" "(カッコ)や (スペース)ではうまく検索できません。

検索方法についてご教示願います。

Aベストアンサー

ファイル名やフォルダ名にスペースを含むものを検索したいのですね。
スペースを検索文字列には使用できないと思います。

使用目的を考えると、ファイル名変換ユーティリティーを使うのが簡単なのではないでしょうか。
以下のフリーウェアは、ファイル・フォルダ名中のスペースを一括削除できます。

参考URL:http://www.vector.co.jp/soft/dl/win95/util/se230280.html

QC:\Windows> から C:\Windows\Win98>への変更方法

次のMS DOSプロンプトの状態から
C:\Windows>

次のMS DOSプロンプトの状態にしたい。
C:\Windows\Win98>

色々試して見ましたがうまくいきませんので、教えてください。テストした結果は以下の通りです。

C:\Windows> CD \   と入力してEnterします
C:\>CD C:\Windows\Win98  と入力してEnterします

ディレクトリーの指定が違いますと、表示されてうまくいきません。

Aベストアンサー

>C:\>CD C:\Windows\Win98  と入力してEnterします

↑で別に間違ってはいないので、"C:\WINDOWS\win98"ディレクトリが存在しないのでは?

dir c:\windows\win98

で確認してみた方が良いと思います。

QACCESS:半角、全角空白スペースを含む文字列の検索

Access2003にて、空白、全角スペースを含む文字列の
検索を行う方法について教えて下さい。

他社から送られてきた検索用のリスト(xls形式)を元に、
商品の検索を下記のフィールドから行っています。
商品フィールドに商品名が約30万行格納されています。
格納されている商品名は間に
半角スペース、全角スペース、スペース無し
など不規則な入力になっています。
(例:東芝除湿機、日立 掃除機、Canon 複合機…)

商品名の検索時に文字列の半角スペースと全角スペースの
指定が異なっていると検索が行えないため困っています。
(例:Canon 複合機で検索時、格納データはCanon 複合機のため検索結果なしになる)

テーブルのスペースを統一、もしくは削除する方法などありますでしょうか。
皆様のお知恵をお貸し下さい。

なお、クエリでtrimを使用したスペースの削除は行ったのですが、
検索時に頻回にErrorが出るようになり断念しました。

Aベストアンサー

replace("東芝除湿機、日立 掃除機、Canon 複合機"," ","",vbtextcompare) で
半角・全角かかわらず全て取り去りますので
テーブル作成クエリなどで処理されたら良いと思います。
そのテーブルをもう更新しないのならインデックスをつければ
検索は速くなると思います。

でも他から来たデータって色々と気をつけないと・・・

Qバッチファイル テキストファイル内の最後の\以下を削除したい

バッチで、あるテキストファイル内の最後の\以下を削除して、その結果をバッチの値として利用したいです。
●テスト条件
%TEMP%のtest.txt に以下のテキスト。
C:\Program Files\software\top xyz
●求める結果:
行末から最初の\以下の文字列を削除。この文字列をバッチファイルで使いたい。
C:\Program Files\software\
●試したコマンド:
なし

全体の流れとしては、バッチでquery取得したパスの不要な部分を削除して、求まったパス(のdirの結果を出力するために)を再度バッチで利用したいです。適切なコマンド・方法がありましたらお願いいたします。

Aベストアンサー

set /p X=<%TEMP%\test.txt
for %%A in ("%X%") do set Y=%%~dpA
echo %Y%


~dp の意味とかは for /? に書いてあります。

Q検索エンジン(特にYahoo!)のキーワードのスペースの影響

ちょっと不思議に思ったので質問させてください。

たとえば、『富士山周辺の温泉』を検索したいときに、
・「富士山(スペース)温泉」
・「富士山温泉」
と検索する場合、結果が違うのはわかりますが。

・「富士山(スペース)温泉」
で検索したとき、『富士山温泉』という名称のものが検索にHITしません。
(別の語ですが。)

2ヶ月くらい前?までは検索されていたのですが、最近になって出なくなったように見受けられます。
それまでは、スペースが「半角」「全角」でも結果が違っていて、「全角」で検索した際にだけ出ていました。

スペースを挿入するのは、検索される語が、
『富士山の温泉』だったり、『温泉(富士山)』のように連続した単語でない可能性があり、『富士山温泉』はスペースがあろうがなかろうが検索される、と習った(?)のですが、そもそも、その教えられ方が間違っていたのか、検索エンジンでの検索方法(またはHIT方式)が変わってしまったのか自分にはわかりません。

どなたか、ご存知の方がいらしたら教えてください。

Aベストアンサー

Yahoo!の検索エンジンの仕様が公開されていないので確かなことは言えませんが、現象から考えて形態素解析のミスである可能性が高いように思います。

検索エンジンというのは決して字面をそのまま検索しているわけではなく、形態素(≒単語)の単位で処理されているというのはご存知でしょうか? 上の例の場合、"富士山温泉"を"富士山"と"温泉"という二つの形態素に分割し、「"富士山"と"温泉"を含むページ」としてURLを覚えておくわけです。

ここで、形態素解析がミスをして"富士"と"山温"と"泉"のように区切りを間違えたとします。これでも"富士山温泉"で検索する分には問題ありません。検索キーワードも同じように切り間違えるからです。

しかし、"富士山(スペース)温泉"で検索された場合は事情が変わります。間にスペースが入っているので、この検索キーワードは「"富士山"と"温泉"を含むページを探せ」と解釈されます。したがって"富士"と"山温"と"泉"と解釈されたページはヒットしないことになります。

ではなぜ、このような現象が急に起こったか、ということですが、これはおそらく辞書のメンテナンスの影響でしょう。日本語にはどんどん新語が現れるので、形態素解析に使用する辞書は定期的にメンテナンスをしなければなりません。今回の現象はそのメンテナンスが裏目に出たのでしょう。将来解決するかどうかはわかりません。

Yahoo!の検索エンジンの仕様が公開されていないので確かなことは言えませんが、現象から考えて形態素解析のミスである可能性が高いように思います。

検索エンジンというのは決して字面をそのまま検索しているわけではなく、形態素(≒単語)の単位で処理されているというのはご存知でしょうか? 上の例の場合、"富士山温泉"を"富士山"と"温泉"という二つの形態素に分割し、「"富士山"と"温泉"を含むページ」としてURLを覚えておくわけです。

ここで、形態素解析がミスをして"富士"と"山温"と"泉"のように区...続きを読む

Qバッチコマンドの for文の使い方。

以下のバッチファイルはテキストを一行ずつ3つの変数に読み込み
<subtest.bat>の処理を行うものです。

この2つのバッチファイルを一つにまとめたいのですがどうすればいいでしょうか。ただし、<subtest.bat>内は実際には10行程度の文です。
goto文を使用してみよとしたのですがうまくいきませんでした。
どなたかわかる方がいらっしゃいましたら、教えていただけないでしょうか、お願いいたします。

------------------------------------------------
rem <test.bat>
@echo off
for /F "usebackq tokens=1-3" %%a in ( file.txt ) do call subtest.bat %%c,%%b,%%a
PAUSE
exit
--------------------------------------------------
rem <subtest.bat>
rem 変数の表示
rem 実際には10行程度の文です。

@echo %3, %2, %1
--------------------------------------------------
<file.txt>の内容(タブ区切り)
shin0.bmp1000200
shin1.bmp700200
shin2.bmp800200
shin3.bmp860200
shin4.bmp400200
--------------------------------------------------

以下のバッチファイルはテキストを一行ずつ3つの変数に読み込み
<subtest.bat>の処理を行うものです。

この2つのバッチファイルを一つにまとめたいのですがどうすればいいでしょうか。ただし、<subtest.bat>内は実際には10行程度の文です。
goto文を使用してみよとしたのですがうまくいきませんでした。
どなたかわかる方がいらっしゃいましたら、教えていただけないでしょうか、お願いいたします。

------------------------------------------------
rem <test.bat>
@echo off
for /F "usebackq to...続きを読む

Aベストアンサー

単純に1つのBATにまとめるのが目的であれば、以下のようにすれば可能です。

@echo off
for /F "usebackq tokens=1-3" %%a in ( file.txt ) do call :subtest %%c,%%b,%%a
PAUSE
goto :eof(もしくはexitなど)

:subtest
@echo %3, %2, %1
exit /b


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

人気Q&Aランキング