:: 1-й необходимо удалить некоторые возможные пробелы в строке, чтобы получить больше точности при их сравнении: "flag = 0
" станет "flag=0
" , нет space
и нет tab
.
:: 2-й длячтобы сделать это, используйте "'
(2 символа), чтобы установить переменную, которая использует " = " для строки вместо специальный символ , set "'=flag=0
" (очень старый технический!)
:: 3-й равный, обработать символ табуляции и удалить его, потому что некоторое времяэто невидимый и возможный символ, который в конечном итоге может появиться в файле данных, см. в этом вопросе 10878138
:: 4-й Сравнение строк за строкой из файла за файлом, строка за строкой ...
:: точно Вам нужно заменить строку в файле (.dat или .ini), эта часть меня действительно смущает, но код приведен выше,извините, если моя ошибка!
Obs: используйте преобразование этого "flag = 0
" вот этот "flag=0
" , только для обработки сравнительных операций, подменим флаг соответствия %%i
= 0, затем изменим только назамените файлы на flag = 1, bat, особая вещь здесь - команда fc сравнивает %% i по тому же файлу в цикле for
с другим файлом.
@echo off && setlocal EnableExtensions EnableDelayedExpansion
set "'=flag=0"
set _file_new_flag1="%temp%\Flag1.dat"
set _path_to_dats=C:\Users\f1ym41a\Documents\deep\
for /f "delims= " %%T in ('forFiles /p "." /m "%~nx0" /c "cmd /c echo(0x09"') do set "_tab=%%T"
type nul >output.log && set "_tab=%_tab:~0,1%"
cd /d "!_path_to_dats!"
for /f "tokens=* delims= " %%x in ('dir /o-d /on /b "*.dat"') do (
if defined _file_new_flag (
move /y "!_file_new_flag1!" "!_file_now!"
set _file_now=<nul
set "_file_now=%%~x"
) else (
set "_file_now=%%~x"
)
call :_file_compare_:
)
endlocal & goto :_end_of_file_:
:_file_compare_:
for /f "tokens=* delims= " %%X in ('type "!_file_now!"') do (
for /f "tokens=* delims= " %%i in ('echo/"%%~X"') do (
set "_to_compare=%%~i"
call set "_to_compare=!_to_compare: =!"
for /f "tokens=* delims=" %%I in ('echo/%_tab%') do call set "_to_compare=!_to_compare:%%I=!"
if ["!_to_compare!"] equ ["%'%"] (
echo/C:\Users\f1ym41a\Documents\deep\MOVE.DAT and %%i are same >>output.log
echo/%%~i>>!_file_new_flag1!
) else (
echo/C:\Users\f1ym41a\Documents\deep\MOVE.DAT and %%i are different >>output.log
echo/flag = 1>>!_file_new_flag1!
)
timeout /t 5
set _to_compare=<nul
)
)
exit /b
:_end_of_file_:
Итак извините о моем английском .