Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 12

Найти файл по маске, в нём найти определённую запись и вывести её в текстовый файл на "Рабочий стол"

03.03.2016, 18:51. Показов 4863. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго Времени Суток Всем!
Задача, собственно, сам сабж.

Половина решения уже вроде как есть(поиск файла по маске):
Windows Batch file
1
@ 2>nul (for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do @for /f "delims=" %%j in ('dir/a-d/b/s "%%i:\*.txt"')
Дело осталось за малым: найти запись/строчку " BD=*-*-*-* " создать и вывести её в файл " Твой_День_Рождения.txt " или " Your_Birth_Day.txt " на "Рабочий стол"("%Systemdrive%\Users\%UserName%\De sktop"). В файле строчка выглядит примерно так: " BD=MARCH-03-1990 ".
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.03.2016, 18:51
Ответы с готовыми решениями:

Разобрать построчно текстовый файл, найти файлы по маске , скопировать в определенную папку
Друзья, доброго дня. Помогите пожалуйста старому дядьке с решением задачки: Дано: а) текстовый файл с артикулами "lam.txt"...

Открыть текстовый файл, найти в нем строки заданного формата и вывести
Помогите пожалуйста.... суть задачи такова... программа открывает текстовый файл(исходный код инетовской страницы сохраненный в текстовом...

Открыть заданный текстовый файл, найти в нем и вывести на экран самую длинную строку
Открыть заданный текстовый файл, найти в нем и вывести на экран самую длинную строку. Имя файла должно передаваться в программу в виде...

13
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
03.03.2016, 21:02
К меня код фантастический получается.А у вас уважаемые асы?
Я придумал,каждый токен помещать в переменную и сравнивать с нужным значением.

Добавлено через 17 минут
Вот код для поиска строки нужной :
Windows Batch file
1
2
3
4
5
6
7
@echo off
Setlocal EnableDelayedExpansion
set "v=13.04.1800"
for /f "delims=" %%a in (1.txt) do (
set c=%%a
for  %%b in (!c!) do  if "%%b"=="%v%" echo 1
)
Дальше надеюсь соединишь отредактируешь.
Берем нужный файл ,помещаем каждую строку из файла в переменную.Затем каждую переменную со строками из файла разбиваем на отдельные строчки и ищем совпадение.
0
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 12
03.03.2016, 22:40  [ТС]
Берем нужный файл ,помещаем каждую строку из файла в переменную.Затем каждую переменную со строками из файла разбиваем на отдельные строчки и ищем совпадение.
Спасибо.. В файле более десятка тысяч строк..

Добавлено через 26 минут
Тут вроде бы придумал, как найти нужную строчку при помощи findstr:
Windows Batch file
1
2
3
@echo off 
FINDSTR BD=*-*-*-* "%userprofile%\Desktop\*.txt > Your_Birth_Day.txt
Your_Birth_Day.txt
Но выдает ошибку "FINDSTR: Не удается открыть файл".
0
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
04.03.2016, 01:41
Вот.
Windows Batch file
1
2
3
4
5
6
7
@echo off
 
for  /f "tokens=*" %%a in ('findstr "13.04.1800" 1.txt') do (
for %%b in (%%a) do if "%%b"=="13.04.1800" echo 1
)
 
pause
Добавлено через 2 часа 25 минут
Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off
 
set n=BD^=May-03-1800
for  /f "tokens=*" %%a in ('findstr "%n%" 1.txt') do (
set c=%%a
)
if defined c (echo %n%>234.txt) else (echo 2)
move %cd%\234.txt %userprofile%\Desktop\234.txt
 
pause
Скрипт ищет строчку с заданной подстрокой и если ее находит,то создает текстовый файл помещая в него искомую подстроку и перемещает файл на рабочий стол.Если искомой подстроки нет,то на экран выводится число два.
1
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 12
05.03.2016, 21:00  [ТС]
ZoOoO,
спасибо вам за ответ, но..
Опять обшибка с невозможностью findstr открыть файл..

С большой надеждой жду отета от Dragokas!
0
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
05.03.2016, 22:44
Под админом сидишь или под обычным Юзером.Попробуй зайти в учетную запись с админскими правами.Или батник запустите от имени администратора.
0
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 12
05.03.2016, 23:10  [ТС]
Под админом.
Из-под админа тоже самое, увы. (((
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
06.03.2016, 01:11
SimulatorCS1990, Строчка в файле должна быть одна в строке и в ней не должно быть символа : двоеточия, да а путь совсем неизвестен? Поиск будет идти ой как не быстро.
Windows Batch file
1
2
3
4
5
6
@echo off
for %%a in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
 for /f "tokens=2 delims=:" %%b in ('findstr /s /lc:"BD=*-*-*-*" "%%a:\*.txt"') do (
  echo.%%b>"%Userprofile%\Desktop\Your_Birth_Day.txt"
))
exit
.

Добавлено через 1 минуту
И, естественно, найдет такие строки (если есть) в других файлах *.txt
1
 Аватар для ComSpec
3462 / 2000 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
06.03.2016, 05:00
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

alpap, приветствую!

Логика Вашего кода верна, но код в "боевых" условиях работать не будет.

Во-первых, шаблон для поиска должен быть примерно таким:
Windows Batch file
"BD=[A-Z][A-Z]*-[0-3][0-9]-[0-9][0-9][0-9][0-9]"
,
и, соответственно, ключ для "FINDSTR" должен быть "/R" (очевидно, Вы просто недочитали ТЗ, да и у ТС почему-то в "псевдошаблоне" написаны три дефиса и четыре звёздочки вместо, соответственно, двух и трёх для строки типа "BD=MARCH-03-1990", что вносит большую неясность в ТЗ).

Во-вторых, обязательность соблюдения условия
Цитата Сообщение от alpap Посмотреть сообщение
в ней [строке] не должно быть символа двоеточия
можно обойти, используя вспомогательный токен:

Windows Batch file
3
4
 for /f "tokens=2* delims=:" %%b in ('findstr /irsc:"BD=[A-Z][A-Z]*-[0-3][0-9]-[0-9][0-9][0-9][0-9]" "%%a:\*.txt"') do (
  echo.%%c>"%Userprofile%\Desktop\Your Birthday.txt"
.

А теперь расскажу о главных уязвимых местах кода.

В-третьих, конструкция типа
Windows Batch file
findstr "something" "F:\file"
в случае, если буква диска окажется буквой дисковода, в котором отсутствует диск, породит появление окна с сообщением

Code
1
2
3
4
5
6
7
---------------------------
findstr.exe - Диск отсутствует
---------------------------
В устройстве нет диска. Вставьте диск в устройство F:. 
---------------------------
Отмена   Повторить   Продолжить   
---------------------------
,
которое придётся закрывать, иначе выполнения пакетного файла не сдвинется с этого места (а кто-то в это время будет пить кофе, так как
Цитата Сообщение от alpap Посмотреть сообщение
поиск будет идти ой как не быстро
)
.

Чтобы этого избежать, нужно предварительно проверять наличие реального диска, например, вот так:
Windows Batch file
2>nul dir F:\:| >nul find ":"&&
.

В-четвёртых, и это самое главное, при рекурсивном поиске на диске существует огромная вероятность, что у пресловутой утилиты "findstr.exe" элементарно не хватит памяти, и она "вылетит" с сообщением об ошибке:
FINDSTR: Недостаточно памяти.
И противостоять этому не представляется возможным в данном варианте кода.

Итого, код должен выглядеть примерно так:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
@echo off
 
>"%USERPROFILE%\Desktop\Your Birthday.txt" (
 for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do @(
  2>nul dir %%i:\:| >nul find ":"&& for /f "tokens=2* delims=:" %%j in (
   'findstr/irsc:"BD=[A-Z][A-Z]*-[0-3][0-9]-[0-9][0-9][0-9][0-9]" "%%i:\*.txt"'
  ) do @echo %%k
 )
)
 
exit/b
.

А вот чтобы у утилиты "findstr.exe" было "достаточно памяти", нужно писать другой код, например, такой:

Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
 
>"%USERPROFILE%\Desktop\Your Birthday.txt" (
 for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do @(
  for /f "delims=" %%j in ('2^>nul dir/a-d/b/s "%%i:\*.txt"') do @(
   findstr/irc:"BD=[A-Z][A-Z]*-[0-3][0-9]-[0-9][0-9][0-9][0-9]" "%%j"&& exit/b
  )
 )
)
.
4
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 12
06.03.2016, 13:40  [ТС]
alpap, спасибо Вам за ответ!
Увы, путь совсем неизвестен. (
А батник просто зависает с мигающим подчеркиванием...

Добавлено через 8 минут
ComSpec,
спасибо, что откликнулись!

у ТС почему-то в "псевдошаблоне" написаны три дефиса и четыре звёздочки вместо, соответственно, двух и трёх для строки типа "BD=MARCH-03-1990", что вносит большую неясность в ТЗ
Каюсь, не доглядел. Там должно быть примерно так: " BD=10754-MARCH-03-1990 ".

Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
 
>"%USERPROFILE%\Desktop\Your Birthday.txt" (
 for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do @(
  for /f "delims=" %%j in ('2^>nul dir/a-d/b/s "%%i:\*.txt"') do @(
   findstr/irc:"BD=[A-Z][A-Z]*-[0-3][0-9]-[0-9][0-9][0-9][0-9]" "%%j"&& exit/b
  )
 )
)
Тут создается пустой файл Your Birthday.txt.
Даже специально поудалял все прочие строчки - и все равно пусто.
0
 Аватар для ComSpec
3462 / 2000 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
06.03.2016, 14:16
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

SimulatorCS1990, здравствуйте!




Цитата Сообщение от SimulatorCS1990 Посмотреть сообщение
Тут создается пустой файл...


Ну это естественно, так как пакетный файл ничего не находит.

Учитывая Ваше разъяснение (
Цитата Сообщение от SimulatorCS1990 Посмотреть сообщение
должно быть примерно так: " BD=10754-MARCH-03-1990 "
),
код должен быть с другим шаблоном для поиска:

Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
 
>"%USERPROFILE%\Desktop\Your Birthday.txt" (
 for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do @(
  for /f "delims=" %%j in ('2^>nul dir/a-d/b/s "%%i:\*.txt"') do @(
   findstr/irc:"BD=[0-9][0-9]*-[A-Z][A-Z]*-[0-3][0-9]-[0-9][0-9][0-9][0-9]" "%%j"&& exit/b
  )
 )
)
.
1
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 12
06.03.2016, 14:41  [ТС]
ComSpec, здравствуйте!
Ещё раз спасибо Вам за участие!
Про шаблон для поиска я уже догадался. )
Проблема в том, что символы могут быть произвольными, кроме " BD= ". Например: " BD=876YFGH-IH45H-BV34UHB-VY879YGB ".
Да, в ТЗ не указал. Но, ведь было, " BD=*-*-*-* ".
0
 Аватар для ComSpec
3462 / 2000 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
06.03.2016, 14:54
Лучший ответ Сообщение было отмечено SimulatorCS1990 как решение

Решение

Цитата Сообщение от SimulatorCS1990 Посмотреть сообщение
Проблема в том, что символы могут быть произвольными, кроме " BD= ". Например: " BD=876YFGH-IH45H-BV34UHB-VY879YGB ".


Ну это легко поправить:

Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
 
>"%USERPROFILE%\Desktop\Your Birthday.txt" (
 for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do @(
  for /f "delims=" %%j in ('2^>nul dir/a-d/b/s "%%i:\*.txt"') do @(
   findstr/irc:"BD=[^-][^-]*-[^-][^-]*-[^-][^-]*-[^-][^-]*" "%%j"&& exit/b
  )
 )
)
.
1
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 12
06.03.2016, 15:05  [ТС]
ComSpec, ОГРОМНЕЙШЕЕ ВАМ СПАСИБО!!

P.S. Всех ваших дам с наступающим Праздником Весны!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.03.2016, 15:05
Помогаю со студенческими работами здесь

Открыть заданный текстовый файл, найти в нем и вывести на экран самую короткую строку
Открыть заданный текстовый файл, найти в нем и вывести на экран самую короткую строку. Что не так, подскажите, пожалуйста! #include...

Прочесть текст из файла, найти количество пробелов в нем, и вывести результат в другой текстовый файл
С помощью программы Блокнот создать маленький текст. Написать программу, которая считает текст из файла, посчитает количество пробелов в...

дан текстовый файл input.txt, найти количество непустых строк в нем и записать в файл output.txt
помогите! дан текстовый файл input.txt, найти количество непустых строк в нем и записать в файл output.txt

Файл A2.dat содержит действительные числа. Прочитать файл, найти минимальное и максимальное числа, вывести их на экран и записать в текстовый файл.
помогите....очень надо...а то зачёт не поставят((

Текстовый файл: найти минимальное значение, результат вывести в другой файл
Текстовый файл содержит набор чисел, найти минимальное значение, результат вывести в другой файл.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru