ファイル名の自動振り分けについて

このQ&Aのポイント
  • ファイル名を該当フォルダ内から検索して移動する方法について教えてください。
  • 手動でファイルの振り分けをしているのですが、バッチファイルを使用して自動的に振り分けられるようにしたいです。
  • 検索してファイルが見つからなければ振り分けないようにする方法も教えてください。
回答を見る
  • ベストアンサー

ファイル名を該当フォルダ内から検索して移動

ファイルの振り分けを手動でしているのですが、 手動は大変なのでバッチファイルで自動的に振り分けられるようにしたいです。 C:\振り分け というフォルダがあり、そこにあらかじめ、 【○○】 [△△] □□.txt といった形式にファイル名をリネームしたファイルを移動しておきます。 過去に整理したファイル達がそれぞれA、B、Cフォルダに入っているとします。 振り分けフォルダのファイル名の先頭から "△△]" の部分まで取得した後、 A、B、Cフォルダの中身をそれぞれ検索して、検索条件に一致したファイルがあったのと 同じフォルダにファイルを自動的に振り分けられるようにしたいです。 また、検索してファイルが見つからなければ振り分けないようにしたいです。 よろしくお願いいたします。

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

  • ベストアンサー
  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.3

ご指摘の点、対応してみました。お試し下さい。 echo off set from=C:\振り分け set to=C:\整理済 for /f "delims=" %%a in ( 'dir /b "%from%\*.txt"' ) do call :sub "%%a" echo 振り分け終了しました exit /b :sub for /f "tokens=1 delims=]" %%f in ( "%~n1" ) do set findname=%%f] :FolderA if exist "%to%\A\%findname%*" move "%from%\%~nx1" "%to%\A\"&&goto :EOF :FolderB if exist "%to%\B\%findname%*" move "%from%\%~nx1" "%to%\B\"&&goto :EOF :FolderC if exist "%to%\C\%findname%*" move "%from%\%~nx1" "%to%\C\" goto :EOF

gooo1000
質問者

お礼

動きました。非常に助かります!どうもありがとうございました!!!

その他の回答 (2)

  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.2

こんにちは。振り分けフォルダから整理済みフォルダ(C:\整理済)配下のA,B,Cフォルダへ振り分けるバッチファイルを作ってみました。 例としている【○○】 [△△] □□.txtですが、】や]のあとに半角空白が入っていますが入っている前提でよろしいですね。 A,B,Cの順で見つかった時点で振り分けしますので、複数一致しても最初のフォルダだけ処理します。 echo off set from=C:\振り分け set to=C:\整理済 for /f "delims=" %%a in ( 'dir /b %from%\*.txt' ) do call :sub "%%a" echo 振り分け終了しました exit /b :sub set org=%1 for /f "tokens=1 delims=]" %%f in ('echo %~1') do set findname=%%f] :FolderA if exist "%to%\A\%findname%*" move "%from%\%~nx1" "%to%\A\"&&goto :EOF :FolderB if exist "%to%\B\%findname%*" move "%from%\%~nx1" "%to%\B\"&&goto :EOF :FolderC if exist "%to%\C\%findname%*" move "%from%\%~nx1" "%to%\C\" goto :EOF

gooo1000
質問者

お礼

考えてくださり、ありがとうございます。 ですが、ファイルパスの部分だけいじったところ 振り分け終了しましたの文言が出てもファイルの移動までしてくれませんでした。 また、ファイル名に () ←半角の括弧がある場合も多数あるのですが、 【AA】 [BB] CC (DD) EE.txt といったファイル名だった場合、 EE.txt') の使い方が誤っています。 といった具合に)から後ろの部分が間違っていると言われ弾かれてしまいます。 □□の部分はワイルドカードでできると思ってたので特に条件にあげていなくてすみませんでした。 弾かれないファイルを1つだけで試してみても移動しなかったのでこれだけが原因ではないと思います。 他にもやり方を変えてはみたのですがやはり自分には手に負えなかったので どうかもう少しお力をお貸しください。よろしくお願いいたします。

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

C:\とかバッチファイルという記述から判断してきっとWindowsの話なんだと思いますが、Windowsに標準で含まれるコマンドだけを使ってバッチでその処理を実現するのは難しそうです。

gooo1000
質問者

補足

環境書いてなかったですね。失礼しました。OSはWindowsXPです。 XPで動けばなんでもかまわないので何かないでしょうか? よろしくお願いします。

関連するQ&A

  • バッチファイル フォルダ名をファイル名に置き換える

    ある複数フォルダに格納されているファイルを、フォルダ名に リネームするバッチファイルを作成したいです。 ●リネーム前 C:\リネーム\あいうえお\data.txt C:\リネーム\かきくけこ\data.txt C:\リネーム\さしすせそ\data1.txt C:\リネーム\さしすせそ\data2.txt C:\リネーム\たちつてと\data1.log C:\リネーム\たちつてと\data2.log C:\リネーム\なにぬねの\data.log ↓ ●リネーム後 C:\リネーム\あいうえお\あいうえお.txt C:\リネーム\かきくけこ\かきくけこ.txt C:\リネーム\さしすせそ\さしすせそ 1.txt C:\リネーム\さしすせそ\さしすせそ 2.txt C:\リネーム\たちつてと\たちつてと 1.log C:\リネーム\たちつてと\たちつてと 2.log C:\リネーム\なにぬねの\なにぬねの.log 知識がなく申し訳ありませんが、お助け願います。。 pause cd c:\リネーム dir /s /b C:\リネーム\ > file.tmp for /f "delims=" %%F in (file.tmp) do ( for /f "delims=\ tokens=3" %%D in ("%%F") do ( REN %%F C:\リネーム\%%D\%%D%%~xF )) del file.tmp pause どうもうまくいきません。。。

  • フォルダ名をファイル名の先頭に追加できるバッチ

    例えばDドライブ直下にAからZまでの26個のフォルダがあり、例えばフォルダAの中に01から99までの連番で01.txt~99.txtと言うものがあったときに、バッチファイルのアイコンにフォルダAをドラッグアンドドロップするとフォルダ内のファイルがA01.txt~A99.txtと言うファイルが生成される、なお、フォルダはAからZまでまとめてバッチファイルのアイコンにドラッグアンドドロップしたらファイル名をリネームできるものを希望します、そのようなバッチはどのように作ったらよいのでしょうか。 当方の環境はwindows7 HomePremiam 64bitです。

  • バッチファイル 現在のフォルダ名をファイル名に置き換える

    こんにちは。超初心者なのですが教えてください。 ある複数フォルダに格納されている.txtファイルを、現在の フォルダ名を取得して、別フォルダにリネームして 格納するバッチファイルを作成したいと考えています。 for文を繰り返し使わなければいけないことはわかっているのですが、それをどう表現していいのか全然わかりません。 例えば、 データ取得元として以下のファイルがあったら C:\temp\20100101\data1.txt C:\temp\20100101\data2.txt C:\temp\20100101\data3.txt C:\temp\20100102\data1.txt C:\temp\20100102\data2.txt C:\temp\20100103\data1.txt C:\temp\20100103\data2.txt これを別フォルダに、現在のフォルダ名をファイル名にくっつけて 以下のように一つのフォルダに纏めて格納したいと思っています。 ファイルの中身はそのままコピーしたいので、どこかでcopyコマンド を使うかもしれないです。 C:\test\data1_20100101.txt C:\test\data2_20100101.txt C:\test\data3_20100101.txt C:\test\data1_20100102.txt C:\test\data2_20100102.txt C:\test\data1_20100103.txt C:\test\data2_20100103.txt 実装方法として以下までは考えましたが、これ以上は無理そうです。 rem set A=C:\temp rem set B=C:\test for %%A in (C:\temp\) do ( if not "%%A"=="" ( pushd "%%A" for /d %%B in (*) do ( if not "%%B"=="" ( pushd "%%B" for /d %%C in (*) do ( if not "%%C"=="" ( pushd "%%C" ) ) ) ) popd? ) ) 申し訳ありませんが、お助け願います。

  • ファイル名の頭3桁が同じフォルダに移動させる

    こんにちは、自分で解決できなかったのでこちらで質問させていただきました。 頭3桁が一致したときにそれぞれのフォルダに移動させるbatを教えてくださいmm ●たとえば(拡張子はtxtとpdf) ●●ファイル名 123456789.txt 123456780.txt 12345678 2.pdf 234567890.txt 23456789-1.txt 345678901.pdf ●●フォルダ名 123_A 234_B 3456 ●●やりたいこと 123_Aのフォルダへ移動  └123456789.txt   123456780.txt   12345678 2.pdf 234_Bのフォルダへ移動  └1234567890.txt   23456789-1.txt 3456のフォルダへ移動  └345678901.pdf どなたか教えてくださると助かりますmm

  • ファイルをフォルダに自動振り分け バッチファイル

    Cドライブ直下の"A"フォルダにある1,000件のCSVファイルをCドライブ直下に作成した5つのフォルダ"1~5"に自動振り分けしたいと思っています。 振り分け条件はExcelで管理しており、CSVのファイル名(1,000件分)と振り分け先のフォルダ名(1,000件それぞれ1~5のフォルダ)を入力してあります。 バッチファイルでMOVEを利用して自動振り分けできないか…と考えていますが、上手く行きません。 どなたか教えていただけないでしょうか。宜しくお願いします。

  • フォルダ名をファイル名の頭につけるバッチ

    お世話になります。 現在、ファイルをフォルダ単位で保存していて、保存しているフォルダは数百個あり、各フォルダに入っているファイルの数はまちまちなのですが、各フォルダの中にあるファイル(全てフォルダの直下にファイルを保存しており、サブディレクトリは作成していないはずです)の頭にフォルダ名を一括でつけたいのですが、そのようなバッチファイルは作れるでしょうか? やりたいこととしては、例えば、"6753シャープ"というフォルダ内に複数個のファイル、例えば"01.txt"、"02.txt"、"03.txt"というファイルがある場合、 それらのファイルをまとめてバッチファイルのアイコンにドラッグアンドドロップしたらファイルを"6753シャープ01.txt"、"6753シャープ02.txt"、"6753シャープ03.txt" というようにリネームさせることは可能でしょうか? 使用しているPCはWindows7 Professionalです。

  • 特定の拡張のファイルを検索し、別のPCにコピーフォルダ名毎コピーしたい

    AのPC上で*.txtを検索し、フォルダ階層名毎、BのPCにコピーしたい。 例)AのPC c:\sample.txt c:\test\sample.txt 希望する結果)BのPC c:\A ←検索したPCの名前のフォルダを作成 (難しければ手動で作成) c:\A\sample.txt c:\A\test\sample.txt どなたかわかる方、教えてくださいm(_ _)m

  • フォルダ名と同じ名前のファイルを移動できるか?

    こんばんは 例えば”教えてgoo”というフォルダがあるとします。これとは別のフォルダAに入っている”教えてgoo.txt”というファイルを前述した同一名称のフォルダに移動する術はありますでしょうか? ファイル名はフォルダ名と完全一致しないものもあります。("教えて.bat"のように) よろしくお願い致します。

  • ファイル名による移動

    ファイル名に4桁のキーをつけています。 このキーの上2桁に合致するフォルダに ファイルを移動するバッチを組みたいのですが、 可能でしょうか? たとえば、ファイル名「0101.txt」「0102.txt」「0201.txt」があった場合、 「0101.txt」「0102.txt」⇒01フォルダへ 「0201.txt」⇒02フォルダへ 頭が固くてすみません・・・ よろしくお願いいたします。

  • バッチファイルで、ファイル名から自動振分したい

     C:\B\の中に、必ず「半角数字4桁_」から始まるファイル名のデータが毎週入ります。  「半角数字4桁_」以後のファイル名、拡張子は、その週によって変わります。  C:\A\の中には、必ず「_半角数字4桁_」で終わるフォルダ名のサブフォルダがあります。  このフォルダ名は、ずっと変わることがありません。  C:\B\の中にあるデータを、ファイル名の最初の4桁の数字をもとに、C:\A\にあるサブフォルダに自動で移動したいです。また、移動する際に、既にサブフォルダ内に「半角数字4桁_」から始まるファイル名のデータがある場合は、削除してから移動したいです。 フォルダ構成です。 Cー|    |-【A】    |   |-【あいう_1234】    |  |-【あい_2235】    |   |-【かきくけ_8990】    |   |-【アイウエオ_5014】    |    |-【B】    |   |-1234_ABC.txt    ←このファイルは C:\A\【あいう_1234】に。    |  |-2235_1534.txt   ←このファイルは C:\A\【あい_2235】に。    |   |-8990_22.doc     ←このファイルは C:\A\【かきくけ_8990】に。    |   |-5014_わをん.doc   ←このファイルは C:\A\【アイウエオ_5014】に。   自分でバッチファイルを記述してみたのですが、ここからどうしていいか分かりません。  どなたか教えてもらえないでしょうか? よろしくお願いします。    自分で記述してみたバッチファイルです。 cd C:\B dir /b > C:\C\list.txt set folder=C:\A set file=C:\B set Bat=C:\C for /f "delims=" %%a in ( %Bat%\list.txt ) do if exist "%file%\%%a" move "%folder%\%%a" "%to%" PAUSE > NUL

専門家に質問してみよう