Windows環境で空白を含むファイルを検索し移動する方法

このQ&Aのポイント
  • Windows環境でforコマンドを使用して空白を含むファイルを検索し、移動させる方法について教えてください。
  • forコマンドで検索されたファイルに空白が含まれる場合、移動することができない問題があります。この問題を解決するためには、検索されたファイル名を引用符で囲む必要があります。具体的な解決方法を教えてください。
  • 例えば、Windows環境で以下のような状況で実行した場合、空白を含むファイルを正しく移動する方法を教えてください。
回答を見る
  • ベストアンサー

Windows環境にてforコマンドで空白を含むファイルを検索して、検

Windows環境にてforコマンドで空白を含むファイルを検索して、検索結果を移動させるバッチを作成したいのですが検索結果に空白を含む場合、移動することができないので困っています。 例えば以下のような状況で実行した場合はどうすればうまく移動することができるのでしょうか? コマンド-------------------- for /f %%A in ('dir /b /s *.mp3') do move "%%A" d:/test カレントディレクトリ------------ AA.txt BB.txt C C.txt 実行結果 AA.txt-->移動 BB.txt-->移動 move "C" d:/test-->指定されたファイルが見つかりません。 おそらくdirコマンドでの検索されたファイルに空白が入っているときは%%Aに空白までのファイル名が挿入されていることが原因だと思います。 コマンドで検索されたファイルを""で括るようなことができれば解決できると思っていますが、そのようなことができるのか知っている方がおりましたら教えていただけないでしょうか? よろしくお願いいたします。 以上

質問者が選んだベストアンサー

  • ベストアンサー
  • 0909union
  • ベストアンサー率39% (325/818)
回答No.1

for /f "usebackq tokens=*" %%A in (`dir /b /s *.mp3`) do move "%%A" d:\test やり方としては、いろいろあるが、上記で目的は達成できます。 もっといろんな物をつくれば、なれるようになりますよ。 for /? で上記””内のオプションを確認してください。

yxa98632
質問者

お礼

すばらしい!無事できました。 ありがとうございます! usebackqはこのように使えるんですね。勉強になります。 早い対応大変助かりました。

その他の回答 (2)

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.3

>ファイル名を文字列として出力するという意味でしょうか? この投稿で問題にしているのは「ファイル名にスペースがある時の処理」ですね。 その問題に的を絞って、話をしています。DO以降はDOSコマンドを羅列すれば、いいだけなので、そちらの問題は、自由に作成者が変更すればいいことです。 「デバック」と言う言葉をご存知ですか? 希望とおり動作しない場合、擬似的な値を挿入したりして、問題箇所の特定と、コードのミニマムの動作を確認します。 何か新しい事をするまえに、どのような値が、変数にセットされるのか? そして、どのように変数の値が移行されるのか? これを見るのがデバックの基本です。 とすれば、最初から何の値がセットされるのか見てから、Moveコマンドをセットすれば、試行錯誤の時間が短くなりますね。 なので、@echo name = "%a" とすれば、すべての値が""内におさまれば、問題をクリアーするわけですよね? 問題をクリアーしてから次のステップにいきましょう。 Moveを実行してしまうと、作り出した環境を再度つくらないとだめですよね。 今回の場合単純ですが、やりたい事が増えると、問題が複雑化します。それらは、ダミーでテストすれば、1日で解決するのが、1週間とかになります。

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.2

とりあえず他のやり方。 for /r . %a in (*.mp3) do @echo name = "%a"

yxa98632
質問者

補足

回答ありがとうございます。 とりあえずコピーして実行してみたのですが移動とかはされませんでした。 これは、今のディレクトリの*.mp3のファイル名を文字列として出力するという意味でしょうか? ほかのやり方ということ参考になるのでもうちょっと調べて見ます。

関連するQ&A

  • findstrで複数ファイルを検索するとき

    findstr "aa bb" fileA.txt fileB.txt とすると、aa bbがそれぞれfileA.txt fileB.txtに適当に入ってるとき、結果は fileA.txt:aa fileB.txt:bb fileB.txt:bb fileA.txt:aa などと、検索結果の各行の初めにファイル名が出てきてしまいます。 このファイル名を出さないようにすることって出来ませんか。この場合、 aa bb bb aa とだけ出てきたらいいのですが。 /Mというオプションはファイル名だけを出すもので、この逆、ファイル名を消す、というのが欲しいのですが。 findstr以外のコマンドでもいいです。 ここで使っているのはwindows用のGNU utilities for Win32です。

  • コマンドプロンプトで別マシンへファイルを移動する

    すいません。 コマンドプロンプトでフォルダ単位でファイルの移動を実施したいのですが、 別のマシンに対してファイルの移動は可能なのでしょうか? 現在、 for /d %M in (mode_*) do move %M C:\move\test\ は可能なのですが、 for /d %M in (mode_*) do move %M Z:\move\test\ で移動ができません。 実行すると、 C:\move>move mode_dir3 Z:\move\test\ アクセスが拒否されました。 と表示されます。 ※Z:\move\test\については、エクスプローラのアドレスバー に直接指定すると移動できるようになっております。 (GUI的に移動も可能な状態です) おわかりになられる方がおりましたら、 ご回答のほど、よろしくお願い致します。

  • バッチファイルにおける環境変数分の繰り返し処理

    こんにちは。 現在、CSVから読み込んだ値(ファイル名)を環境変数に格納し、その環境変数に合致したファイルの移動を行う。というバッチファイルを作成しています。 作成にあたってCSVからのファイル名の読み込み及び、環境変数に全てのファイル名を1個ずつ格納する事(a1=AAやa2=BBなど)には成功したのですが、その後のファイルを移動するコマンドが上手く書けません。 ちなみに move "*%a1%*.txt" "C:\" move "*%a2%*.txt" "C:\" 上記のように1個ずつ手動で環境変数を指定しての移動は出来るのですが、その日によって 取得するファイル名(環境変数の数)が異なってくる為、可能であれば自動で環境変数の数を取得し環境変数分、1個ずつ環境変数からファイル名を読み込み、そのファイルを移動させる。と言ったバッチを組みたいのです。 よろしくお願い致します。 ------------------------------------------------------------------ set count=1 for /f %%i in (test.csv) do @call :add %%i goto PROCESS1 :add set a%count%=%1 set /A count+=1 goto :EOF :PROCESS1 ※移動するコマンド ------------------------------------------------------------------

  • ファイル移動処理(コマンドプロンプト batファイル)

    ファイル移動処理(コマンドプロンプト batファイル) .batファイルでファイル名に日付がついたファイル(例:yyyymmdd_test.txt)の最新日付から2世代前のファイルまでをディレクトリに移動するような処理を記述したいのですが、やり方がわかりません。 例) 20100924_test.txt →移動対象外 20100925_test.txt →移動対象外 20100926_test.txt →移動対象 20100927_test.txt →移動対象 20100928_test.txt →移動対象 今、この下記の様に記述をしていますが意図した処理になりません。 どなたか助言を頂けないでしょうか? -------------------------------------------------------- mkdir temp set num=0 for %%f in (????????_test.txt) do ( set /a num+=1 if %num%==1 move %f% \temp\%f if %num%==2 move %f% \temp\%f if %num%==3 move %f% \temp\%f )

  • bash forコマンドでソート

    bash forコマンドでソート CentOS8 bashの forコマンドで、ディレクトリ内のファイル名を部分指定した降順でソートした状態で順次読み込みしたいです。 <ファイル> aaa.dat bbbb_0001.dat TEST_0001.file TEST_0002.file TEST_0003.file <アウトプット> TEST_0003.file TEST_0002.file TEST_0001.file 基本的な読込と、lsコマンドの結果を基に読み込む方法はわかりましたが、これに降順ソートを加えるにはどうすれば良いでしょうか? <基本的な読込> for file in /dir1/TEST_*.file do echo $file done <lsコマンドの結果を基に読込> for file in $(ls /dir1/TEST_*.file) do echo $file done

  • DOSコマンドのFOR文で空白を含むファイルパスの指定方法

    DOSコマンドのFOR文で空白を含むファイルパスの指定方法 DOSコマンドのFOR文で、FORの繰り返し条件に 空白を含むファイルパスを指定する方法を教えてください。 やりたいことのイメージはこんな感じです。 for /f %%a in (C:\Documents and Settings\user\デスクトップ\list.txt) do ( echo %%a ) バッチファイルとlist.txtを同じディレクトリに配置し、かつ FOR文の前にCDを含めない事を条件にすれば 下記でもうまくいきます。 for /f %%a in (list.txt) do ( echo %%a ) 他のコマンドとの関係からこの前の処理で一度ディレクトリの 変更を行なう処理を含むため、FOR文で指定するファイルは 絶対パス指定をしたいと思っています。 簡単なことのような気もするのですが、 もしかしたら出来ないのかもしれないとも思っています。 FORの繰り返し条件に空白を含むファイルパスを 指定することはできるのでしょうか? 出来るのならばその方法を教えてください。 よろしくお願いします。

  • コマンドでのファイルの移動

    aaフォルダの中に複数のフォルダがあり、その複数フォルダの中のファイルをすべてbbフォルダに移したいのですが・・・・ for /f %a in ('dir D:\aa /b') do xcopy /d D:\aa\%a\* D:\bb\ とすると、aaの中のフォルダで、フォルダ名が半角スペースを含むものは移動の対象となってくれません。(>_<) 「てす と」フォルダは「てす」として判断され、中のファイルは そのまま残ってしまいます。 どのようにすればうまくいけるのでしょうか。 よろしくお願いいたします。

  • windows7のコマンドでファイルを検索したい

    windows7のコマンドでファイルを検索したいのですが、 調べてみると下記のようなコマンドで調べれるとの事でした。 dir /s /b *** しかしこれではカレントディレクトリからしか調べる事ができず不十分です。 全てのドライブからこのファイルを検索したいというコマンドを探しております。 unixでいえば find / -name *** のようなものです。 windows7のコマンドプロンプトではこのような事はできないのでしょうか。

  • バッチファイルのコマンドについて

    Cドライブにフォルダ【TMP】があります。このフォルダには毎日、日付けの名称のフォルダ(ddmmyyyy)が一つ作成されます。C:\TMPにあるサブディレクトリを、Dドライブ【BAK】フォルダに移動するバッチファイルを作成したいのですが、どのようなコマンドを記述すればいいのでしょうか。 set dir1=c:\tmp\* set dir2=d:\bak move "%dir1%" "%dir2%" 上記では、tmpのファイルのみしか移動出来ません。また、d:\bakに移動したフォルダを定期的に削除したいのですが(作成後、一ヶ月以上経過したフォルダ)どのようにdelコマンドを記述すればいいでしょうか。 宜しくお願いします。

  • ファイル検索

    こんにちは。質問させてください。 あるフォルダ(ここでは$dir = "c:\\test\\file_data\\"とでもしておきます。)内に テキストファイルが複数存在するとします。 test1218.01.file1.txt test1218.10.file1.txt test1218.11.file1.txt test1219.01.file1.txt test1219.10.file1.txt test1219.11.file1.txt test1219.01.file2.txt test1219.10.file2.txt test1219.11.file2.txt 上記のようなファイル名のテキストファイルが存在したとします。 それでこのテキストファイルのうち、以下のファイルの内容を画面に表示したいと 考えています。 test1219.01.file1.txt test1219.10.file1.txt test1219.11.file1.txt 1219(今日の日付という意味), file1(一回目のファイルという意味)で 構成された上記のファイルを指定されたディレクトリ($dir)以下で 検索し上記のファイル名を取得し、また取得したファイルの中身を 表示するロジックを考えています。 ひとつのファイルを取得することはできたのですが、 複数となる(上記の場合は3つ当てはまることはわからないので 指定する日付などで取得ファイル数がかなりことなる)ため うまく書くことができません。 どなたかいいロジックなどをお持ちでしたら ぜひ伝授していただけたらと考えています。 どうかよろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう