|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов |
|
CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов
|
Новый участник Сообщения: 22 |
Профиль | Отправить PM | Цитировать
Есть текстовый файл 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 числом, если хоть одно различие то выполнить скрипт далее. |
|
Отправлено: 17:14, 11-02-2019 |
Ветеран Сообщения: 2710
|
Профиль | Отправить PM | Цитировать Если надо идентичность файлов
@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
Если надо одинаковые числа в файлах вне зависимости от порядка
Заменить выделенный кусок предыдущего кода
: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
|
------- Последний раз редактировалось megaloman, 12-02-2019 в 16:44. Отправлено: 16:36, 12-02-2019 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 22
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
Если в 1.txt число 1 и число 2 = 1 15, пишет: Есть оба числа, поехали дальше выполнять, а в действительности 15 нету. Для этого набора все четко работает: |
|
Отправлено: 19:10, 12-02-2019 | #12 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата papacoca:
Цитата papacoca:
В общем, надо менять механизм проверки. @echo off set "file1=1.txt" set "file2=2.txt" set "var=2 5 7 15 17 19 23 31 35" :begin cls echo.Проверяем числа set /a f1=0,f2=0 if not exist "%file1%" (echo.Такого файла [%file1%], не существует&pause&exit /b) <1.txt (for /f "tokens=1,2" %%a in ('more') do ( for %%i in (%var%) do ( if [%%a] equ [%%i] (set /a f1=1) if [%%b] equ [%%i] (set /a f2=1) ) ) ) if %f1% equ 1 ( if %f2% equ 1 (goto next) else ( echo Возвращаемся в начало до посинения, пока в файле не появятся обе цифры timeout /t 3 goto begin ) ) else ( echo Возвращаемся в начало до посинения, пока в файле не появятся обе цифры timeout /t 3 goto begin ) pause&echo Error&exit /b :next echo. echo.Есть оба числа, поехали дальше выполнять timeout /t 5 echo.Выполнили echo. echo Переименовываем [%file1%] В [%file2%] move /y "%file1%" "%file2%" :wait if not exist "%file1%" (echo.Ожидаем создания [%file1%]&timeout /t 5&echo.&goto wait) >nul fc "%file1%" "%file2%"&&(echo.Файлы идентичны&goto next2) echo.Файлы отличаются, поехали дальше... echo.Приехали! Станция "Конечная". pause&exit /b :next2 echo.здесь выполняем код, если файлы одинаковые. pause&exit /b |
||
------- Последний раз редактировалось YuS_2, 12-02-2019 в 20:25. Причина: Исправлен вариант проверки чисел Отправлено: 20:09, 12-02-2019 | #13 |
Новый участник Сообщения: 22
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
Можете подсказать: чтобы скрипт дополнительно проверял file1=1.txt, если он пустой или содержит @ # эти символы то выполнял заново. Если можно в пару строк) |
|
Отправлено: 19:54, 28-02-2019 | #14 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата papacoca:
надо заменить квадратные скобки на кавычки в условных проверках, т.е. вот эти две строки: должны стать таким: и всё. PS Хотя он и с квадратными скобками должен в начало переходить и работать по кругу, пока цифры не появятся... А у Вас что происходило? |
|
------- Последний раз редактировалось YuS_2, 01-03-2019 в 08:25. Отправлено: 08:00, 01-03-2019 | #15 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - При открытии текстовых файлов .txt блокнотом зависает компьютер (ос W10) | biomirror | Microsoft Windows 10 | 10 | 29-06-2016 13:26 | |
CMD/BAT - Сравнение содержимого 2х текстовых файлов, с выводом отчета | bionicmon | Скриптовые языки администрирования Windows | 3 | 23-11-2015 18:16 | |
Сравнение текстовых файлов | Speedy | Программное обеспечение Windows | 9 | 30-03-2015 02:42 | |
Разное - [решено] Не могу добавить элемент в контекстное меню для текстовых файлов (*.txt) в windows 7 | kefirko | Microsoft Windows 7 | 37 | 17-07-2014 09:28 | |
Офис и Текст - Автоматическое сравнение текстовых файлов | Kzer-Za | Программное обеспечение Windows | 4 | 04-10-2011 11:50 |
|