DOSバッチでフォルダ配下の全ファイルの一致確認
Windowsのコマンドプロンプトのバッチファイルで
2つのフォルダの配下にあるファイルがすべて完全に
一致することを確認するバッチファイルを作成しています。
下記のようなコードまではできたのですが、
現状ではコードの「pause」の所で、
一度、止めて、人が、
list1.txtのファイルから環境変数xの文字列
(ここではC:\document\A\)
list2.txtのファイルから環境変数yの文字列
(ここではC:\document\B\)
を削除して保存し直してから続行しないと
うまくいきません。
回避策として、pauseの所で、
list1.txtのファイルを1行ずつ読み込んで
環境変数xの文字列を空白文字に置換して
上書き保存する。
list2.txtのファイルを1行ずつ読み込んで
環境変数yの文字列を空白文字に置換して
上書き保存する。
ということをしたいのですが、
(方法1)
set 環境変数=%環境変数:置換前文字列=置換後文字列%
の置換前文字列を環境変数%x%で指定することが
できないようなのでうまくいきません。
(方法2)
環境変数xの文字列の文字数を環境変数lenに入れて
set 環境変数=%環境変数:~開始文字位置,文字数%
の開始文字位置を環境変数%len%で指定することが
できないようなのでうまくいきません。
何かよい方法はないでしょうか。
---test.bat---------------------------------
@setlocal enabledelayedexpansion
@echo off
rem 以下の2行を実行前に書き換える
set x=C:\document\A\
set y=C:\document\B\
set w=FC: 相違点は検出されませんでした
set w=%w:~0,18%
set v=*****
set v=%v:~0,5%
if exist list1.txt del list1.txt
if exist list2.txt del list2.txt
if exist huichi1.txt del huichi1.txt
if exist huichi2.txt del huichi2.txt
dir /b /s /a-d %x% > list1.txt
dir /b /s /a-d %y% > list2.txt
pause
fc /n /w list1.txt list2.txt > huichi1.txt
for /F "delims=" %%i in (huichi1.txt) do (
set j=%%i
set j=!j:~0,18!
if !j!==!w! goto OK1
)
set /p z="両者は一致しませんでした。huichi1.txtを確認してください。"
goto END
:OK1
for /F "delims=" %%i in (list1.txt) do (
fc /n /w "%x%%%i" "%y%%%i" >> huichi2.txt
)
set u=0
for /F "delims=" %%i in (huichi2.txt) do (
set j=%%i
set j=!j:~0,5!
if !j!==!v! set u=1
)
if %u%==0 (
set /p z="両者は完全に一致しました。"
) else (
set /p z="両者は一致しませんでした。huichi2.txtを確認してください。"
)
:END
------------------------------------
【条件】
・Wondows7のコマンドプロンプトで実行する。
・他のツール(perlなど)は使用しない。
・test.batは
set x=C:\document\A\
set y=C:\document\B\
の部分のみをその都度書き換えて使用する。
よろしくお願いします。
お礼
ありがとうございます。 この方法で実現できました