バッチファイル 複数ファイルの存在確認及び、比較方法

このQ&Aのポイント
  • WindowsXP環境で複数のテキストファイルをコピーし、コピーの正常性と同一性を確認する方法について教えてください。
  • Lで始まるテキストファイルがあり、ファイル数が日によって異なる場合、効率的にコピーの存在確認と比較を行う方法を教えてください。
  • 500個以上のLで始まるテキストファイルのコピーの存在確認と同一性を判定する方法についてアドバイスをいただけますか?
回答を見る
  • ベストアンサー

バッチファイル 複数ファイルの存在確認及び、比較方法

お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード--- COPY D:\in\L*.txt E:\out\L*.txt コード--- 単純なコピー処理ですが、この後に下記の処理を追加したいのです。 (1)コピー元からコピー先へちゃんとコピーされたかを判定。 (2)コピー元とコピー先のテキストファイルが同一ファイルかを判定。 (3)(1)・(2)で問題なかった場合により、正常と他のテキストファイルに書き込む。   1ファイルでもNGだったら異常と書き込む。 おそらく(1)はIF EXIST~、(2)はFC~ で問題なさそうですが 1ファイルずつ(1)・(2)をコードで書くと、膨大になってしまいます。 (3)はIFで可能かもしれません。 そもそも先頭にLがついたファイルは、以下の条件があります。 ・日によってファイル数が違う。500ファイルもある場合あり。 ・先頭にLがついているテキストファイル以外の共通部分がない。  L0fje.txtとかL8hfy.txtとか・・・。固定ファイル名がない。 例えば、500ファイルもあると(1)・(2)のコードをひたすらコード入力するのは 非常に効率が悪いです。 良い方法があるでしょうか? ご存知の方がいれば、ご教授願いますでしょうか? 宜しくお願い致します。

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

  • ベストアンサー
  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.2

for /f %%i in (D:\in\L*.txt) do (  if exist %%i echo %%~nxi } 上記の1行目の書式で、"D:\in\L*.txt"に該当するファイル名のフルパス名が一つずつ変数"%%i"に入ります。"do"の後ろの"("から3行目の")"の間に実際の処理コマンドを記述します。複数行可。 フルパス名からファイル名+拡張子だけを取り出したい時には、"%%~nxi"で取り出せます。 過去に私が回答した"for"コマンド関連のQ&Aです。 (2つ目と3つ目は、in ( )の部分が若干異なります。) 『OKWave:Windowsバッチでの作成について困っております。』 http://okwave.jp/qa/q5357631.html 『OKWave:Windowsバッチでできるのかな・・・』 http://okwave.jp/qa/q5431927.html 『OKWave:バッチファイルについて』 http://okwave.jp/qa/q5387178.html

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

書かれている条件だと、単に copy /v で良さそうですけど。 copy /v 実行後に、 if errorlevel 1 (echo NG>FILE.txt) else (echo OK>FILE.txt)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

for でまわす.

関連するQ&A

  • バッチファイル ワイルドカード処理確認方法

    お世話になります。 WindowsXP環境にて下記のバッチファイルがあります。 コード------------------------------- COPY D:\in\L*.txt E:\out1\L*.txt MOVE D:\in\L*.txt F:\out2\P*.txt コード------------------------------- こういうワイルドカードを使用したコピー・移動処理がうまくいったかどうかを 確認する方法として、if %errorlevel%~ で一番無難なのでしょうか? if %errorlevel%~を追加するのであれば、 上記コードだと・・・ コピー処理後に if %errorlevel%~ そして問題無ければ今度は移動処理・・・ さらにif %errorlevel%~ それともForとかでまわさないと確実な確認が出来ないのでしょうか? Forだとコードが増えるので極力避けたいですが・・・。 ご存知の方がいれば、ご教授願います。 宜しくお願い致します。

  • バッチファイル フォルダ存在 確認

    いつも大変御世話になっております。 WindowsXP SP2に【D:\test\bat】フォルダに【test.bat】があります。 上記バッチファイルは以下のようになっています。 コード------------------------------------------------ rem --- 時間変数 --- set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set YMD=%date:~-8,10% set HHMMSS=%time:~0,8% set FILE_DATE=%date:~-10,4%%date:~-5,2%%date:~-2,2%%TIME:~0,2%%TIME:~3,2% set FILE_DATE=%FILE_DATE: =0% rem --- フォルダ変数 --- set log=D:\test\drive_xcopy\log set INP_DIR=D:\test\drive_xcopy\in set OUT_DIR=D:\test\drive_xcopy\out\ rem --- ファイル変数 --- set logName=log.txt echo "%YMD%","%HHMMSS%","FOLDER.bat","処理開始" >> %log%\%logName% REM フォルダコピー XCOPY "%INP_DIR%" "%OUT_DIR%" /e /Y >> %log%\%logName% echo "%YMD%","%HHMMSS%","FOLDER.bat","処理終了" >> %log%\%logName% コード------------------------------------------------ 単純に【D:\test\drive_xcopy\in\】内のすべてのフォルダを 【D:\test\drive_xcopy\out\】内にコピーしています。 ちなみに、、【D:\test\drive_xcopy\in\】フォルダには100個フォルダがあります。 実現したい事は、コピー対象となる100個フォルダがちゃんとコピーされ、 コピー先にすべて確実存在しているかを【コピー元⇔コピー先】とで 1つ1つマッチング処理したいのです。 すべて存在していれば、上記ログファイルに 100フォルダすべてが存在しています。 と書き込み、 1つでも存在していなければ、上記ログファイルに ○○○フォルダがコピー先に存在していません。 それ以外は存在しています。 と書き込むような処理を実現したいのです。 コピー先に存在していないのが複数であれば 下記のようなログメッセージを書き込みたいです。 ログメッセージ例----------------------- ○○○フォルダがコピー先に存在していません。 ×××フォルダがコピー先に存在していません。 それ以外は存在しています。 ログメッセージ例----------------------- For文とIF文をうまく使い、フォルダを変数で順に格納してマッチングするような 作成になると思いますが、難しくて苦戦しています。 方法をご存知の方がいれば、ご教授願いますでしょうか? ※サンプルがあれば、光栄です。 宜しくお願い致します。

  • DOSバッチファイルへの引き渡し方法

    次のような操作をしたいのですが。 御教示下さい。 操作の流れ テキストファイルに一文字出力する CMD1 > a.txt テキストファイルa.txtには、一文字しかはいらない 1やa など そのa.txt の内容を判断して バッチファイルb.bat内で分岐処理したい   b.bat 内  if 'a.txtの内容' により分岐処理

  • 複数テキストを一行ずつファイル名を付けて結合する方法

    複数テキストを一行ずつファイル名を付けて結合する方法 フォルダにある複数のテキストデータを1つのテキストデータに結合する際、テキスト1行毎の先頭にファイル名を付けたいのですが。具体的には以下の通りです。 最終的にはexcelに取込み処理するので、excelのマクロかDOS系でできるとあり難いです。 [file1.txt] 1111111111 2222 33333333 [file2.txt] 123 1234 ↓ [all.txt] file1.txt 1111111111 file1.txt 2222 file1.txt 33333333 file2.txt 123 file2.txt 1234

  • バッチファイルで複数のテキストファイルの置換

    バッチファイルで以下のような処理を行うことはできないでしょうか? フォルダ1以下の全てのテキストファイル内の abcde という文字列を あいうえお に置換して、上書き保存ではなく 元のファイル名+(編集済み).txt というファイル名で同じ場所に保存できないでしょうか。 バッチファイルで出来ない場合他の物でも構いません。 ――――――――――――――――――――――――――――― 処理前 フォルダ1   │   ├フォルダ2   │  └ファイル1.txt (内容:123abcde)   │   ├フォルダ3   │  └フォルダ4   │     └ファイル2.txt (内容:abcde123abcde123)   │   └フォルダ5      └ファイル3.txt (内容:456fghij) ――――――――――――――――――――――――――――― ↓ ――――――――――――――――――――――――――――― 処理後 フォルダ1   │   ├フォルダ2   │  └ファイル1.txt (内容:123abcde)   │  └ファイル1(編集済).txt (内容:123あいうえお)   │   ├フォルダ3   │  └フォルダ4   │     ├ファイル2.txt (内容:abcde123abcde123)   │     └ファイル2(編集済).txt (内容:あいうえお123あいうえお123)   │   └フォルダ5      └ファイル3.txt (内容:456fghij) ――――――――――――――――――――――――――――― こんな感じで出来ないでしょうか。 よろしくお願いします。

  • バッチファイルでファイル名をリネームのコマンド

    お世話になります。 バッチファイルのコマンドについて質問させていただきます。 【やりたいこと】 AAA.batというバッチファイルと”MU_日付.txt”というテキストがあります。 このテキストの日付部分は毎回変わります。例)MU_111226.txt このバッチファイルとMU_日付.txtは同じ階層にあります。 まず、このAAA.batをクリックしたら、この”MU_111226.txt” を ”読み込み.txt” という名前にリネームします。このリネーム処理の時、テキスト名が”MU”で始まるファイル以外は対象にしないようにしたいのです。 次にある処理を行って、その処理が済んだら”読み込み.txt”を”END_MU_111226.txt”といった元のファイル名に”END_”を付けた形でリネームして、同じ階層にある「処理済み」フォルダへ移動させたいのです。 ”END_” + ”元のファイル名”が無理であれば、”MU_111226.txt”を「処理済み」フォルダへ移動させるだけでも構いません。 このような処理は可能でしょうか? どなたかご教授いただけますでしょうか。よろしくお願い致します。

  • バッチファイルでファイル名をリネームのコマンドにつ

    お世話になります。 バッチファイルのコマンドについて質問させていただきます。 【やりたいこと】 AAA.batというバッチファイルと”MU_日付.txt”というテキストがあります。 このテキストの日付部分は毎回変わります。例)MU_111226.txt このバッチファイルとMU_日付.txtは同じ階層にあります。 まず、このAAA.batをクリックしたら、この”MU_111226.txt” を ”読み込み.txt” という名前にリネームします。このリネーム処理の時、テキスト名が”MU”で始まるファイル以外は対象にしないようにしたいのです。 次にある処理を行って、その処理が済んだら”読み込み.txt”を”END_MU_111226.txt”といった元のファイル名に”END_”を付けた形でリネームして、同じ階層にある「処理済み」フォルダへ移動させたいのです。 ”END_” + ”元のファイル名”が無理であれば、”MU_111226.txt”を「処理済み」フォルダへ移動させるだけでも構いません。 このような処理は可能でしょうか? どなたjかご教授いただけますでしょうか。よろしくお願い致します。

  • バッチファイル 指定ファイル

    お世話様です。 あるバッチファイルの作成に困っております。 『D:\test』フォルダに下記の3ファイルがあります。 ・CS_090609.txt ・CS_090603.txt ・CS_081215.txt があり、数字の部分は作成された日を表しております。 上記ファイルだと、上から2009/6/5・2009/6/3・2008/12/15に 作成されているとします。 今年の6月9日にあるバッチファイルでCS_090609.txtをそのまま残し それ以外のCS_090603.txt・CS_081215.txtをいったん『D:\test\bkp』フォルダに コピーし、その後、『D:\test』フォルダにある090603.txt・CS_081215.txtを削除 する処理を実施したいのですが、どうもうまく作成出来ません。 せいぜい自分のスキルでは、CS_*.txtですべてのファイルを『D:\test\bkp』にコピーし、 その後、『D:\test』フォルダにあるすべてのファイルの削除しかできません。 お手数ですが、何かご教授願いますでしょうか? ※サンプルコードがあると、助かります。 何卒宜しくお願い致します。

  • xcopyでのバッチコピー方法でコピーできない

    こんにちは。 xcopyを使って、ネットワーク上のファイルを、同じくネットワーク上の別フォルダにコピーしたいと思っています。 ローカルで下記のコードを書きました。 xcopy C:\abc.txt D:\ これは問題なく、Dドライブ直下にデータがコピーできました。 次に、ネットワーク上のあるファイルを指定してコピーするコードを書きました。 xcopy \\mynetwork\abc.txt \\mynetwork\something\ or xcopy "\\mynetwork\abc.txt" "\\mynetwork\something\" これは一応はバッチ画面は起動されるのですが、正しくコピーをできませんでした。つまりコピーは失敗におわりました。 何が間違っているでしょうか? やりたい事は、単一のテキストファイルを、ある特定のフォルダにコピーして、既に同じファイル名があれば上書きするといったことをやりたいです。 よろしくお願いいたします。

  • PHPでテキストファイルかどうかを判定する方法

    基本的なことですが、PHPでテキストファイルかバイナリーファイかを判定する方法がわかりません。以下のperlコードをphpで書く方法を教えてください。 if( -T $filename ){ テキストファイルの処理 }else{ バイナリーファイルの処理 } マニュアル見ましたがよくわかりませんでした。よろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう