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

Компьютерный форум 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


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

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


Это что за лабораторка дурная такая?!

Отправлено: 20:50, 11-02-2019 | #2



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

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


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


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

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


Та нет, это для другого...

Отправлено: 21:15, 11-02-2019 | #3


Ветеран


Contributor


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

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


Тогда опишите саму задачу, а не выбранное решение.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:17, 11-02-2019 | #4


Аватара для YuS_2

Старожил


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

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


papacoca, вот решение, на Ваш алгоритм:
Код: Выделить весь код
@echo off
set "file1=1.txt"
set "file2=2.txt"
set "var=2 5 7 15 17 19 23 31 35"

:begin
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 (
		echo.%%a|>nul findstr "%var%"&&set /a f1=1
		echo.%%b|>nul findstr "%var%"&&set /a f2=1
	)
)
if %f1% equ 1 (
	if %f2% equ 1 (goto next) else (
		echo Возвращаемся в начало до посинения, пока в файле не появятся обе цифры
		pause&goto begin
	)
) else (
	echo Возвращаемся в начало до посинения, пока в файле не появятся обе цифры
	pause&goto begin
)
pause&echo Error&exit /b

:next
echo.
echo.Есть оба числа, поехали дальше выполнять
timeout /t 5
echo.Выполнили
echo.
echo Переименовываем [%file1%] В [%file2%]
if not exist "%file2%" (ren "%file1%" "%file2%") else (
	echo.Файл [%file2%] уже существует. Требуется принятие решения. Выходим.
	pause&exit /b
)

:wait
if not exist "%file1%" (echo.Ожидаем создания [%file1%]&timeout /t 5&echo.&goto wait)
>nul fc "%file1%" "%file2%"&&(echo.Файлы идентичны. Что будем делать дальше - не знаю :^)&pause&exit /b)
echo.Файлы отличаются, поехали дальше...
echo.Приехали! Станция "Конечная".
pause

-------
scio me nihil scire


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

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

Отправлено: 21:33, 11-02-2019 | #5


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


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

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


Цитата YuS_2:
вот решение, на Ваш алгоритм: »
Благодарю за проделанную работу, спасибо.

Одно уточнение!
В 3) пункте: Пишет, Переименовываем [1.txt] в [2.txt] Файл [2.txt] уже существует.
Не может переименовать [1.txt] в [2.txt] потому что он существует.

Можно сделать, чтоб без лишних запросов, удалить 2.txt и переименовать 1.txt в 2.txt, автоматом нужно?
Так как 2.txt будет постоянно создан его нужно удалить перед тем как переименовать 1.txt

Последний раз редактировалось papacoca, 11-02-2019 в 22:58.


Отправлено: 22:35, 11-02-2019 | #6


Аватара для YuS_2

Старожил


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

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


Цитата papacoca:
Не может переименовать [1.txt] в [2.txt] потому что он существует. »
Ну, так в Вашем алгоритме и нет никаких условий на такую ситуацию

Цитата papacoca:
Можно сделать, чтоб без лишних запросов, удалить 2.txt и переименовать 1.txt в 2.txt, автоматом нужно? »
Можно, конечно, но попытайтесь это сделать самостоятельно, это несложно.
Подсказка:
Редактировать надо вот этот условный блок:
Код: Выделить весь код
if not exist "%file2%" (ren "%file1%" "%file2%") else (
	echo.Файл [%file2%] уже существует. Требуется принятие решения. Выходим.
	pause&exit /b
)
надо заменить проверку на существование файла с ложного, на истинный и добавить перед переименованием команду удаления файла...
Либо, вместо добавления команды удаления, можно просто заменить команду переименования на команду перемещения - move с ключом /y, а условный блок вообще убрать, оставить только одну команду move
В помощь:
Код: Выделить весь код
if /?
move /?
del /?
ren /?
pause /?
exit ?

-------
scio me nihil scire


Последний раз редактировалось YuS_2, 11-02-2019 в 23:13.

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

Отправлено: 23:07, 11-02-2019 | #7


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


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

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


Цитата YuS_2:
Ну, так в Вашем алгоритме и нет никаких условий на такую ситуацию »
Совершенно точно, сделаю.

Можете немного пояснить, если файлы идентичны вместо этого прописать 1 сценарий?
Код: Выделить весь код
(echo.Файлы идентичны. Что будем делать дальше - не знаю :^)&pause&exit /b)
Если файлы отличаются то нужно прописывать после этого 2 сценарий?
Код: Выделить весь код
echo.Приехали! Станция "Конечная".
Цитата:
>nul fc "%file1%" "%file2%"&&(echo.Файлы идентичны. Что будем делать дальше - не знаю :^)&pause&exit /b)
echo.Файлы отличаются, поехали дальше...
echo.Приехали! Станция "Конечная".

Отправлено: 23:27, 11-02-2019 | #8


Аватара для YuS_2

Старожил


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

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


Цитата papacoca:
если файлы идентичны вместо этого прописать 1 сценарий? »
Цитата YuS_2:
(echo.Файлы идентичны. Что будем делать дальше - не знаю :^)&pause&exit /b) »
Да, здесь можно прописать доп.сценарий, либо организовать переход на метку, которую поместить надо после строк сценария, который должен выполняться при различных файлах.
Т.е. примерно так:
Код: Выделить весь код
...
>nul fc "%file1%" "%file2%"&&(echo.Файлы идентичны&goto next2)
echo.Файлы отличаются, поехали дальше...
echo.Приехали! Станция "Конечная".
pause&exit /b

:next2
echo.здесь выполняем код, если файлы одинаковые.
pause&exit /b
Цитата papacoca:
Если файлы отличаются то нужно прописывать после этого 2 сценарий? »
Вместо этих двух строк:
Цитата YuS_2:
echo.Файлы отличаются, поехали дальше...
echo.Приехали! Станция "Конечная". »
можно писать какой угодно сценарий...

-------
scio me nihil scire


Отправлено: 23:46, 11-02-2019 | #9


Ветеран


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

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


Цитата Iska:
Тогда опишите саму задачу, а не выбранное решение. »
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
Это сообщение посчитали полезным следующие участники:

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



Компьютерный форум 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




 
Переход