CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
-
papacoca
CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
Есть текстовый файл 1.txt в котором записаны 2 числа (число 1 и число 2) в один ряд через пробел, берем за пример: 31 5
1) Если хоть одного из числа 1 и числа 2 нет в перечне: 2, 5, 7, 15, 17, 19, 23, 31, 35 то выполнить скрипт заново.
2) Если число 1 и число 2 есть в списке чисел то выполнить скрипт далее.
3) Переименовать 1.txt в 2.txt.
4) Новый созданный 1.txt сравнить с 2.txt - 1 число с 1 числом и 2 число с 2 числом, если хоть одно различие то выполнить скрипт далее.
1) Если хоть одного из числа 1 и числа 2 нет в перечне: 2, 5, 7, 15, 17, 19, 23, 31, 35 то выполнить скрипт заново.
2) Если число 1 и число 2 есть в списке чисел то выполнить скрипт далее.
3) Переименовать 1.txt в 2.txt.
4) Новый созданный 1.txt сравнить с 2.txt - 1 число с 1 числом и 2 число с 2 числом, если хоть одно различие то выполнить скрипт далее.
-
Iska
-
megaloman
Re: CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
Если надо идентичность файлов
[spoiler][/spoiler]
Если надо одинаковые числа в файлах вне зависимости от порядка
[spoiler]Заменить выделенный кусок предыдущего кода[/spoiler]
Я сделал таймаут (у меня 10 сек) для ожидания 1 файла, если его нет или если значения не содержатся в реестре.
[spoiler]
Код: Выделить всё
@Echo Off
Cls
Set "FileIn=Z:\Soft_In\1.txt"
Set "FileOut=Z:\Soft_In\2.txt"
Set "Reestr=2, 5, 7, 15, 17, 19, 23, 31, 35"
Set /A Tsec=10
Set "SR=="
For %%i In (%Reestr%) Do Call Set "SR=%%SR%%%%i="
:Begin1
Call :NoFile "%FileIn%" %Tsec% ||GoTo :Begin1
3<"%FileIn%" (Set /p SIn=<&3)
Call :Found "%SIn%" "%SR%" %Tsec% ||GoTo :Begin1
>nul Move /Y "%FileIn%" "%FileOut%"
Set "SInNew=%SIn%"
:Begin2
Call :NoFile "%FileIn%" %Tsec% ||GoTo :Begin2
3<"%FileIn%" (Set /p SInNew=<&3)
If "%SInNew%"=="%SIn%" Echo +++ Файлы "%FileIn%" "%FileOut%" одинаковые. Что дальше - не знаю :) &Pause &Exit /b 0
If Not "%SInNew%"=="%SIn%" Echo --- Файлы "%FileIn%" "%FileOut%" разные. Что дальше - не знаю :) &Pause &Exit /b 1
GoTo :Eof
:NoFile
If Not Exist %1 (
Echo --- Нет файла %1
Timeout /T %~2
Exit /B 1 &Rem Файла нет
)
Exit /B 0
:Found
For %%i In (%~1) Do >Nul (Echo %~2|Find "=%%i=")||(
Echo --- Нет %%i в реестре значений
Timeout /T %~3
Exit /B 1 &Rem Что-то не найдено в реестре значений
)
Exit /B 0Если надо одинаковые числа в файлах вне зависимости от порядка
[spoiler]Заменить выделенный кусок предыдущего кода
Код: Выделить всё
:Begin2
Call :NoFile "%FileIn%" %Tsec% ||GoTo :Begin2
Set "SRnew=="
For %%i In (%SIn%) Do Call Set "SRnew=%%SRnew%%%%i="
3<"%FileIn%" (Set /p SInNew=<&3)
Call :Found "%SInNew%" "%SRnew%" 0
If "%ErrorLevel%"=="0" Echo +++ В файлах "%FileIn%" "%FileOut%" одинаковые числа. Что дальше - не знаю :) &Pause &Exit /b 0
If Not "%ErrorLevel%"=="0" Echo --- В файлах "%FileIn%" "%FileOut%" числа отличаются. Что дальше - не знаю :) &Pause &Exit /b 1Я сделал таймаут (у меня 10 сек) для ожидания 1 файла, если его нет или если значения не содержатся в реестре.
-
Iska
-
papacoca
Re: CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
Тогда опишите саму задачу, а не выбранное решение.
-
YuS_2
Re: CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
Цитата YuS_2:
вот решение, на Ваш алгоритм:
Благодарю за проделанную работу, спасибо.
Одно уточнение!
В 3) пункте: Пишет, Переименовываем [1.txt] в [2.txt] Файл [2.txt] уже существует.
Не может переименовать [1.txt] в [2.txt] потому что он существует.
Можно сделать, чтоб без лишних запросов, удалить 2.txt и переименовать 1.txt в 2.txt, автоматом нужно?
Так как 2.txt будет постоянно создан его нужно удалить перед тем как переименовать 1.txt
вот решение, на Ваш алгоритм:
CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
Благодарю за проделанную работу, спасибо.
Одно уточнение!
В 3) пункте: Пишет, Переименовываем [1.txt] в [2.txt] Файл [2.txt] уже существует.
Не может переименовать [1.txt] в [2.txt] потому что он существует.
Можно сделать, чтоб без лишних запросов, удалить 2.txt и переименовать 1.txt в 2.txt, автоматом нужно?
Так как 2.txt будет постоянно создан его нужно удалить перед тем как переименовать 1.txt
-
papacoca
Re: CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
Цитата papacoca:
Не может переименовать [1.txt] в [2.txt] потому что он существует.
Ну, так в Вашем алгоритме и нет никаких условий на такую ситуацию
Цитата papacoca:
Можно сделать, чтоб без лишних запросов, удалить 2.txt и переименовать 1.txt в 2.txt, автоматом нужно?
Можно, конечно, но попытайтесь это сделать самостоятельно, это несложно.
Подсказка:
Редактировать надо вот этот условный блок:
Код:
надо заменить проверку на существование файла с ложного, на истинный и добавить перед переименованием команду удаления файла...
Либо, вместо добавления команды удаления, можно просто заменить команду переименования на команду перемещения - move с ключом /y, а условный блок вообще убрать, оставить только одну команду move
В помощь:
Код:
Не может переименовать [1.txt] в [2.txt] потому что он существует.
CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
Ну, так в Вашем алгоритме и нет никаких условий на такую ситуацию

Цитата papacoca:
Можно сделать, чтоб без лишних запросов, удалить 2.txt и переименовать 1.txt в 2.txt, автоматом нужно?
CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
Можно, конечно, но попытайтесь это сделать самостоятельно, это несложно.
Подсказка:
Редактировать надо вот этот условный блок:
Код:
Код: Выделить всё
if not exist "%file2%" (ren "%file1%" "%file2%") else (
echo.Файл [%file2%] уже существует. Требуется принятие решения. Выходим.
pause&exit /b
)надо заменить проверку на существование файла с ложного, на истинный и добавить перед переименованием команду удаления файла...
Либо, вместо добавления команды удаления, можно просто заменить команду переименования на команду перемещения - move с ключом /y, а условный блок вообще убрать, оставить только одну команду move
В помощь:
Код:
Код: Выделить всё
if /?
move /?
del /?
ren /?
pause /?
exit ?-
YuS_2
Re: CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
Цитата YuS_2:
Ну, так в Вашем алгоритме и нет никаких условий на такую ситуацию
Совершенно точно, сделаю.
Можете немного пояснить, если файлы идентичны вместо этого прописать 1 сценарий?
Код:
Если файлы отличаются то нужно прописывать после этого 2 сценарий?
Код:
Цитата:
>nul fc "%file1%" "%file2%"&&(echo.Файлы идентичны. Что будем делать дальше - не знаю :^)&pause&exit /b)
echo.Файлы отличаются, поехали дальше...
echo.Приехали! Станция "Конечная".
Ну, так в Вашем алгоритме и нет никаких условий на такую ситуацию
CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
Совершенно точно, сделаю.
Можете немного пояснить, если файлы идентичны вместо этого прописать 1 сценарий?
Код:
Код: Выделить всё
(echo.Файлы идентичны. Что будем делать дальше - не знаю :^)&pause&exit /b)Если файлы отличаются то нужно прописывать после этого 2 сценарий?
Код:
Код: Выделить всё
echo.Приехали! Станция "Конечная".Цитата:
>nul fc "%file1%" "%file2%"&&(echo.Файлы идентичны. Что будем делать дальше - не знаю :^)&pause&exit /b)
echo.Файлы отличаются, поехали дальше...
echo.Приехали! Станция "Конечная".
-
papacoca
Re: CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
Цитата papacoca:
если файлы идентичны вместо этого прописать 1 сценарий?
Цитата YuS_2:
(echo.Файлы идентичны. Что будем делать дальше - не знаю :^)&pause&exit /b)
Да, здесь можно прописать доп.сценарий, либо организовать переход на метку, которую поместить надо после строк сценария, который должен выполняться при различных файлах.
Т.е. примерно так:
Код:
Цитата papacoca:
Если файлы отличаются то нужно прописывать после этого 2 сценарий?
Вместо этих двух строк:
Цитата YuS_2:
echo.Файлы отличаются, поехали дальше...
echo.Приехали! Станция "Конечная".
можно писать какой угодно сценарий...
если файлы идентичны вместо этого прописать 1 сценарий?
CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
Цитата YuS_2:
(echo.Файлы идентичны. Что будем делать дальше - не знаю :^)&pause&exit /b)
CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
Да, здесь можно прописать доп.сценарий, либо организовать переход на метку, которую поместить надо после строк сценария, который должен выполняться при различных файлах.
Т.е. примерно так:
Код:
Код: Выделить всё
...
>nul fc "%file1%" "%file2%"&&(echo.Файлы идентичны&goto next2)
echo.Файлы отличаются, поехали дальше...
echo.Приехали! Станция "Конечная".
pause&exit /b
:next2
echo.здесь выполняем код, если файлы одинаковые.
pause&exit /bЦитата papacoca:
Если файлы отличаются то нужно прописывать после этого 2 сценарий?
CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
Вместо этих двух строк:
Цитата YuS_2:
echo.Файлы отличаются, поехали дальше...
echo.Приехали! Станция "Конечная".
CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
можно писать какой угодно сценарий...
-
YuS_2
Re: CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
Цитата Iska:
Тогда опишите саму задачу, а не выбранное решение.
papacoca, очень веское замечание и даже пытаясь выполнить требуемое, натыкаешься или на недомолвку или несоответствие. Запускать похоже надо планировщиком и желательно по контролю появления "1.txt". В моем коде он всегда удаляется для освобождения места для нового и если echo (предохранитель) в if-ах не убирать, то видны все варианты при разных сочетаниях соответствия файлов и перечня. Да, еще, для сравнения фалов использовал ту же методику что и с перечнем на тот случай если в файле "1.txt" будет строка: 31 5, а в файле "2.txt" будет строка: 5 31, то в моем случае такие файлы будут считаться равными по содержанию (fc выдаст ошибку по errorlevel), если такого быть не может или это должно быть отличием, то fc использовать допустимо.
Тогда опишите саму задачу, а не выбранное решение.
CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
papacoca, очень веское замечание и даже пытаясь выполнить требуемое, натыкаешься или на недомолвку или несоответствие. Запускать похоже надо планировщиком и желательно по контролю появления "1.txt". В моем коде он всегда удаляется для освобождения места для нового и если echo (предохранитель) в if-ах не убирать, то видны все варианты при разных сочетаниях соответствия файлов и перечня. Да, еще, для сравнения фалов использовал ту же методику что и с перечнем на тот случай если в файле "1.txt" будет строка: 31 5, а в файле "2.txt" будет строка: 5 31, то в моем случае такие файлы будут считаться равными по содержанию (fc выдаст ошибку по errorlevel), если такого быть не может или это должно быть отличием, то fc использовать допустимо.
Код: Выделить всё
@echo off
set "f1=1.txt"
set "f2=2.txt"
set "pr=2, 5, 7, 15, 17, 19, 23, 31, 35"
if not exist "%f1%" (echo No "%f1%"& pause& exit) else (<"%f1%" set /p z1=)
if exist "%f2%" <"%f2%" set /p z2=
for %%a in (%z2%) do echo %%a|>nul findstr "%z1%" || set x2=%%a
for %%a in (%z1%) do echo %%a|>nul findstr "%pr:,=%" || set x1=%%a
if not defined x2 (
echo Отличий в файлах нет, удаляем "%f2%" и переименовываем "%f1%" в "%f2%"& echo del "%f2%"& echo ren "%f1%" "%f2%"
) else (
if not defined x1 (
echo Оба числа есть в перечне, удаляем "%f2%" и переименовываем "%f1%" в "%f2%"& echo del "%f2%"& echo ren "%f1%" "%f2%"
) else (
echo Одного или двух чисел нет в перечне, удаляем "%f2%" и переименовываем "%f1%" в "%f2%"& echo del "%f2%"& echo ren "%f1%" "%f2%"
)
)
pause