Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов

Ответить
Настройки темы
CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов

Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: txt 1.txt
(4 байт, 5 просмотров)
Есть текстовый файл 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

 

Ветеран


Contributor


Сообщения: 1522
Благодарности: 893

Профиль | Отправить 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
Я сделал таймаут (у меня 10 сек) для ожидания 1 файла, если его нет или если значения не содержатся в реестре.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 12-02-2019 в 16:44.


Отправлено: 16:36, 12-02-2019 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
set "var=" »
Возникла проблемка с этим набором цифр.

Код: Выделить весь код
set "var=1 4 6 14 16 20 24 32 39"
Если в 1.txt число 1 и число 2 = 1 15, пишет: Есть оба числа, поехали дальше выполнять, а в действительности 15 нету.

Для этого набора все четко работает:
Код: Выделить весь код
set "var=2 5 7 15 17 19 23 31 35"

Отправлено: 19:10, 12-02-2019 | #12


Аватара для YuS_2

Старожил


Сообщения: 297
Благодарности: 111

Профиль | Отправить PM | Цитировать


Цитата papacoca:
Возникла проблемка »
Да, это я не продумал...
Цитата papacoca:
Для этого набора все четко работает: »
Боюсь, что тоже не четко... можно проверить, два числа 2 и 25, например...
В общем, надо менять механизм проверки.
Код: Выделить весь код
@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

-------
scio me nihil scire


Последний раз редактировалось YuS_2, 12-02-2019 в 20:25. Причина: Исправлен вариант проверки чисел

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:09, 12-02-2019 | #13


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
В общем, надо менять механизм проверки. »
Скрипт работает хорошо! Но есть такой баг не в скрипте а в файле file1=1.txt который создается автоматически, бывает он пустой или с иероглифами типа @ #
Можете подсказать: чтобы скрипт дополнительно проверял file1=1.txt, если он пустой или содержит @ # эти символы то выполнял заново.
Если можно в пару строк)

Отправлено: 19:54, 28-02-2019 | #14


Аватара для YuS_2

Старожил


Сообщения: 297
Благодарности: 111

Профиль | Отправить PM | Цитировать


Цитата papacoca:
если он пустой или содержит @ # эти символы то выполнял заново.
Если можно в пару строк »
Можно даже короче
надо заменить квадратные скобки на кавычки в условных проверках, т.е. вот эти две строки:
Код: Выделить весь код
			if [%%a] equ [%%i] (set /a f1=1)
			if [%%b] equ [%%i] (set /a f2=1)
должны стать таким:
Код: Выделить весь код
			if "%%a" equ "%%i" (set /a f1=1)
			if "%%b" equ "%%i" (set /a f2=1)
и всё.

PS Хотя он и с квадратными скобками должен в начало переходить и работать по кругу, пока цифры не появятся...
А у Вас что происходило?

-------
scio me nihil scire


Последний раз редактировалось YuS_2, 01-03-2019 в 08:25.


Отправлено: 08:00, 01-03-2019 | #15



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Сравнение чисел в .txt и двух текстовых файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - При открытии текстовых файлов .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




 
Переход