[前の記事]« バッチ処理で必要なパスワードを別ファイルにして管理するには
[次の記事]startコマンドでMS_Accessのファイルを実行すると、プロンプト側でエラーが出ます »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「DEL,ERASE,REN…ファイル削除/復活/移動/名前の変更」索引へ

ファイル内容に応じてファイルを複数のフォルダに振り分けたい

384.
ファイル内容に応じてフォルダ分けをするには?
2005年04月14日(木) 19時07分
痺れ団子
はじめまして、痺れ団子と申します。よろしくお願いします。
OSはWin2Kです。

お聞きしたいのは、例えばtxtファイルが一杯あるフォルダがあるとして、
ファイルの中身に「xxx」という文字列が含まれるファイルは「XXX」フォルダへ、
「yyy」という文字列が含まれるファイルは「YYY」フォルダへ移動する、
という処理を行うバッチファイルの組み方です。
もしそういった事が可能でしたら、ご教授ください。

ちなみに、
xxxもyyyも両方含むファイルは移動しないといった例外処理が、
簡単にできるようでしたらこれもついでにご教授いただけると幸いです。
手間がかかりそうなら、結構ですので。
386.
Re:ファイル内容に応じてフォルダ分けをするには?
2005年04月15日(金) 11時49分
じゃく
こんにちは。


>お聞きしたいのは、例えばtxtファイルが一杯あるフォルダがあるとして、
>ファイルの中身に「xxx」という文字列が含まれるファイルは「XXX」フォルダへ、
>「yyy」という文字列が含まれるファイルは「YYY」フォルダへ移動する、
>という処理を行うバッチファイルの組み方です。
>もしそういった事が可能でしたら、ご教授ください。

ざっと動作するバッチを書いてみました。
文字列とフォルダ名の大文字小文字を区別して記載されていますが
フォルダ名は検索文字列と同じとして作っています。あしからず。

>ちなみに、
>xxxもyyyも両方含むファイルは移動しないといった例外処理が、
>簡単にできるようでしたらこれもついでにご教授いただけると幸いです。

移動しないではなく、一旦移動したxxxを含むファイルの中で、
yyyを含むファイルは元へ戻すという簡易版で作ってみました。
(移動時間がかかりますが、記述は簡単です)
対象テキストファイルと同じフォルダにsample.batをおいて
実行してみてください。

------------------------- sample.bat
set chkstr1=xxx
set chkstr2=yyy

:ディレクトリ(フォルダ)の作成
dir /a:d %chkstr1% >NUL 2>&1||md %chkstr1%
dir /a:d %chkstr2% >NUL 2>&1||md %chkstr2%

:該当テキストファイルの移動
for /F "usebackq delims=" %%f in (`findstr /M "%chkstr1%" *.txt`) do move %%f %chkstr1% 
for /F "usebackq delims=" %%f in (`findstr /M "%chkstr2%" *.txt`) do move %%f %chkstr2%

:両方に合致する場合戻す
for /F "usebackq delims=" %%f in (`findstr  /M "%chkstr2%" %chkstr1%\*.txt`) do move %%f .

※先ほど間違えて、ファイルの中身ではなくファイル名を
 見て移動するバージョンをアップしました。(^-^;
 再投稿です。
391.
Re2:ファイル内容に応じてフォルダ分けをするには?
2005年04月15日(金) 21時02分
痺れ団子
じゃく様、ご返信ならびにバッチ作成ありがとうございます。

「xxx」「yyy」という文字列ならばうまく動作することは確認しましたが、
どうやら日本語の文字列だと動作してくれないようなので、
よろしければ今一度お教えいただけると幸いです。

チャットログを自分のHN別にフォルダ分けできたら、という事で質問させていただいたのですが、チャットの形式が
NH : 発言内容
という形で記録されており、自分のHN2つをそれぞれ「-shibire-」「痺れ団子」とすると、
組んでいただいたバッチを一部改めて

----------------------------------------
set chkstr1=-shibire-
set chkstr2=痺れ団子

:該当テキストファイルの移動
for /F "usebackq delims=" %%f in (`findstr /M /c:"%chkstr1% :" *.txt`) do move %%f %chkstr1%
for /F "usebackq delims=" %%f in (`findstr /M /c:"%chkstr2% :" *.txt`) do move %%f %chkstr2%
----------------------------------------

こういった形にしてみましたが、英字HNは振り分けてくれますが、日本語HNの方で止まってしまいます。
順番を入れ替えても、やはり日本語HNの方で止まってしまいますので、おそらく問題はそこだと思います。
あまりDOSのルール・仕様を理解してないので、変なことしてるかもしれませんが……。

よろしくお願いします。
396.
Re3:ファイル内容に応じてフォルダ分けをするには?
2005年04月17日(日) 08時08分
じゃく
痺れ団子さんこんにちは。

>「xxx」「yyy」という文字列ならばうまく動作することは確認しましたが、
>どうやら日本語の文字列だと動作してくれないようなので、

えー、これは、この掲示板でもooさん(otnさん)が指摘しているように
windows2000のfor文の中で日本語(2バイト文字)を使ったときに
発生する cmd.exe のバグのようです。

http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/for_in_do/3-0471.html

>----------------------------------------
>set chkstr1=-shibire-
>set chkstr2=痺れ団子

>:該当テキストファイルの移動
>for /F "usebackq delims=" %%f in (`findstr /M /c:"%chkstr1% :" *.txt`) do move %%f %chkstr1%
>for /F "usebackq delims=" %%f in (`findstr /M /c:"%chkstr2% :" *.txt`) do move %%f %chkstr2%
>----------------------------------------

>こういった形にしてみましたが、英字HNは振り分けてくれますが、日本語HNの方で止まってしまいます。
>順番を入れ替えても、やはり日本語HNの方で止まってしまいますので、おそらく問題はそこだと思います。

一時ファイルを作るのがいやでなかったら、
for文のin()の中を別の行に出して一時ファイルを作れば解決します。

set chkstr1=-shibire-
set chkstr2=痺れ団子

:該当テキストファイルのリスト作成
findstr /M /c:"%chkstr1% :" *.txt >chklist1
findstr /M /c:"%chkstr2% :" *.txt >chklist2

:該当テキストファイルの移動
for /F "delims=" %%f in ( chklist1 ) do move %%f %chkstr1%
for /F "delims=" %%f in ( chklist2 ) do move %%f %chkstr2%

:ファイルリストの削除(お好みで)
del chklist1
del chklist2
397.
Re4:ファイル内容に応じてフォルダ分けをするには?
2005年04月18日(月) 09時22分
じゃく
自己レスです。

先にリストを2つ作ると、両方に一致する場合に
存在しないファイルをリストに挙げてしまいますね。
以下のように訂正します。


>set chkstr1=-shibire-
>set chkstr2=痺れ団子

>:該当テキストファイルのリスト作成と移動
>findstr /M /c:"%chkstr1% :" *.txt >chklist1
>for /F "delims=" %%f in ( chklist1 ) do move %%f %chkstr1%
>findstr /M /c:"%chkstr2% :" *.txt >chklist2
>for /F "delims=" %%f in ( chklist2 ) do move %%f %chkstr2%

>:ファイルリストの削除(お好みで)
>del chklist1
>del chklist2
 
 


カテゴリー「DEL,ERASE,REN…ファイル削除/復活/移動/名前の変更」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2005年04月14日 14:50に投稿されたエントリーのページです。

ひとつ前の投稿は「バッチ処理で必要なパスワードを別ファイルにして管理するには」です。

次の投稿は「startコマンドでMS_Accessのファイルを実行すると、プロンプト側でエラーが出ます」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート