Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.87/30: Рейтинг темы: голосов - 30, средняя оценка - 4.87
tager3
5 / 5 / 3
Регистрация: 02.11.2010
Сообщений: 136
1

Поиск заданных слов в файлах и выполнение определённых действий с теми файлами, в которых найдены совпадения

25.06.2013, 17:48. Просмотров 5983. Ответов 17
Метки нет (Все метки)

Помогите батник настрочить
Необходимо чтобы батник проверял в папке все файлы которые там есть.
Файлы по сути текстовые, но лежат в формате *.KVT
так вот нужно чтобы батник проверял присутствует в файле слово "привет" , если да , то этот файл нужно скопировать в определенную папку. Мне подсказывали , что проще это сделать на VBScript, буду благодарен за помощь.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2013, 17:48
Ответы с готовыми решениями:

Поиск нужных строк в HTML-файлах по заданному ключу и запись определённых слов из найденных строк в CSV-файл
Есть 100 файлов в папке BDVK с форматом .html Нужно сделать программу которая...

Поиск и замена слов в текстовых файлах
Приветствую! Помогите пожалуйста. Необходим батник. Входные данные: Есть...

Поиск слов и фраз в файлах с записью в лог
Здравствуйте Уважаемые Форумчане. На работе задали задание написать cmd...

Выполнение определённых действий сразу после установки приложения
Приветствую! Подскажите, пожалуйста, есть ли возможность где-нибудь прописать...

Реализовать выполнение заданных действий над одномерным массивом.
"Реализовать выполнение заданных действий над одномерным массивом. Число...

17
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
25.06.2013, 19:49 2
Проще для того, кто советовал.
По сути на Batch-е главная часть записывается в пару строк:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
SetLocal EnableExtensions
::Задайте папку, в которой искать файлы
set src=c:\temp
::Задайте маску для искомых файлов
set mask=*.KVT
::Задайте искомую фразу
set word=привет
::Задайте расположение папки, в которую копировать найденные файлы
set dest=c:\founded
 
for /f "delims=" %%a in ('dir /b /s /a-d "%src%\%mask%"') do (
  >nul find "%word%" < "%%~a" && copy /y "%%~a" "%dest%\"
)
pause
И не забывайте про кодировку Batch-файла: Русский текст в консоли
0
tager3
5 / 5 / 3
Регистрация: 02.11.2010
Сообщений: 136
26.06.2013, 19:09  [ТС] 3
а какой оператор для нескольких условий , если нужно искать не только слово привет, но если и встречается слово пока в другом файле , или слово зачем в третьем файле. что бы была проверка на все слова, есл

Bash
1
2
3
set word1=привет
set word2=пока
set word3= зачем
или можно все искомые фразы запихнуть в одно значение set word=привет, пока, зачем ???????


Bash
1
2
3
4
for /f "delims=" %%a in ('dir /b /s /a-d "%src%\%mask%"') do (
  >nul find "%word1%" "%word2%" "%word3%" < "%%~a" && copy /y "%%~a" "%dest%\"
)
pause
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
27.06.2013, 01:09 4
В этом случае нужно заменить команду find на findstr.
Чтобы искать без учета регистра букв - добавляем ключ /i, как в примере ниже.
Перечень вариантов слов пишется через пробел.

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
SetLocal EnableExtensions
::Задайте папку, в которой искать файлы
set src=c:\temp
::Задайте маску для искомых файлов
set mask=*.KVT
::Задайте искомую фразу
set word=привет пока зачем
::Задайте расположение папки, в которую копировать найденные файлы
set dest=c:\founded
 
for /f "delims=" %%a in ('dir /b /s /a-d "%src%\%mask%"') do (
  >nul findstr /i "%word%" < "%%~a" && copy /y "%%~a" "%dest%\"
)
pause
1
tager3
5 / 5 / 3
Регистрация: 02.11.2010
Сообщений: 136
27.06.2013, 09:22  [ТС] 5
что то не работает командная строка просто висит (

методом проб похоже просто команда findstr не срабатывает (
0
Eva Rosalene
Ladybug
4052 / 1591 / 303
Регистрация: 06.01.2013
Сообщений: 4,188
Завершенные тесты: 2
27.06.2013, 10:56 6
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@echo off
SetLocal EnableExtensions
::Задайте папку, в которой искать файлы
set src=c:\temp
::Задайте маску для искомых файлов
set mask=*.KVT
::Задайте искомую фразу
set word=привет пока зачем
::Задайте расположение папки, в которую копировать найденные файлы
set dest=c:\founded
 
for /f "delims=" %%a in ('dir /b /s /a-d "%src%\%mask%"') do (
 for %%A IN (%word%) DO (
  >nul find "%%A" < "%%~a" && copy /y "%%~a" "%dest%\" >nul 2>nul
 )
)
pause
Однако если в файле есть оба слова скопирует два раза.
0
tager3
5 / 5 / 3
Регистрация: 02.11.2010
Сообщений: 136
27.06.2013, 11:33  [ТС] 7
Цитата Сообщение от FraidZZ Посмотреть сообщение

Однако если в файле есть оба слова скопирует два раза.
а если не копировать, а перемещать, то это ведь должно предотвратить копирование одного и того же файла несколько раз ?
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
27.06.2013, 16:11 8
Да, бывали случаи когда findstr зависала при наличии большого кол-ва открывающихся скобок в содержимом файла.
Решение: отказаться от нее.

На счет варианта с find можно завести доп. словарь найденных файлов:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
::Задайте папку, в которой искать файлы
set src=c:\temp
::Задайте маску для искомых файлов
set mask=*.KVT
::Задайте искомую фразу
set word=привет пока зачем
::Задайте расположение папки, в которую копировать найденные файлы
set dest=c:\founded
 
for /f "delims=" %%a in ('dir /b /s /a-d "%src%\%mask%"') do (
  for %%W IN (%word%) DO (
    >nul find "%%W" < "%%~a" && (
      set fpname=%%~pnxa
      if not defined !fpname:\=.! (
        set "!fpname:\=.!=true"
        copy /y "%%~a" "%dest%\" >nul 2>nul
      )
    )
  )
)
pause
2
tager3
5 / 5 / 3
Регистрация: 02.11.2010
Сообщений: 136
28.06.2013, 14:39  [ТС] 9
спасибо за помощь
0
tager3
5 / 5 / 3
Регистрация: 02.11.2010
Сообщений: 136
01.07.2013, 10:38  [ТС] 10
столкнулся с проблемой
просмотрел через cmd ( во вложении) что за ошибка синтаксиса или метке тома

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
set dd=%DATE:~0,2%
set mm=%DATE:~3,2%
set yyyy=%DATE:~6,4%
set datus=%yyyy%%mm%%dd%
    
rem @echo off
SetLocal EnableExtensions
::Задайте папку, в которой искать файлы
set src=R:\
::Задайте маску для искомых файлов
set mask=*.KVT
::Задайте искомую фразу
set word=0409118V 0409135D 0409901 0409101D 0409301 0409134D 0409157 0409711
set word1=0409652 0409406 F665 0409405 0409664 0409308 0409601
::Задайте расположение папки, в которую копировать найденные файлы
set dest=g:\REP_EL\%yyyy%\%mm%-%yyyy%\%dd%\spravka\
set dest1=q:\REP_EL\%yyyy%\%mm%-%yyyy%\%dd%\spravka\
 
for /f "delims=" %%a in ('dir /b /s /a-d "%src%\%mask%"') do (
for %%A IN (%word%) DO (
  >nul find "%%A" < "%%~a" && move /y "%%~a" "%dest%\" >nul 2>nul
 )
)
 
 
for /f "delims=" %%a in ('dir /b /s /a-d "%src%\%mask%"') do (
 for %%A IN (%word1%) DO (
  >nul find "%%A" < "%%~a" && move /y "%%~a" "%dest1%\" >nul 2>nul
 )
)
0
Миниатюры
Поиск заданных слов в файлах и выполнение определённых действий с теми файлами, в которых найдены совпадения  
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
01.07.2013, 21:57 11
Диском не ошиблись?

Bash
1
2
if exist "g:\REP_EL\%yyyy%\%mm%-%yyyy%\%dd%\spravka\" echo OK
if exist "q:\REP_EL\%yyyy%\%mm%-%yyyy%\%dd%\spravka\" echo OK
Что пишет?
0
tager3
5 / 5 / 3
Регистрация: 02.11.2010
Сообщений: 136
02.07.2013, 15:45  [ТС] 12
диском не ошибся, так как разные квитанции в разные диски идут


вот что пишет
0
Миниатюры
Поиск заданных слов в файлах и выполнение определённых действий с теми файлами, в которых найдены совпадения  
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
02.07.2013, 16:55 13
Понятия не имею, почему так. На вид, все верно.

Могу посоветовать только выполнить пошагово, "выдергивая" каждую команду.
Или - попробуйте так - поставьте в 21-ю строку Echo:

Bash
1
>nul find "%%A" < "%%~a" && echo move /y "%%~a" "%dest%\" >nul 2>nul
Будут ошибки теперь? И что выдает?
0
tager3
5 / 5 / 3
Регистрация: 02.11.2010
Сообщений: 136
02.07.2013, 17:20  [ТС] 14
с ошибками разобрался, что то не корректно было в пути к файлам где искать их)
теперь другое интересует, он начинает искать квитанции даже в папках которые находятся в каталоге, соответственно вопрос как сделать чтоб поиск осуществлялся только в корне каталога, чтобы не лезло в папки и подпапки )))))
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
02.07.2013, 17:25 15
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@echo off
SetLocal EnableExtensions
 
::Задайте папку, в которой искать файлы
set src=R:\
 
::Задайте маску для искомых файлов
set mask=*.KVT
 
::Задайте искомую фразу
set word=0409118V 0409135D 0409901 0409101D 0409301 0409134D 0409157 0409711
set word1=0409652 0409406 F665 0409405 0409664 0409308 0409601
 
set dd=%DATE:~0,2%
set mm=%DATE:~3,2%
set yyyy=%DATE:~6,4%
set datus=%yyyy%%mm%%dd%
 
::Задайте расположение папки, в которую копировать найденные файлы
set dest=g:\REP_EL\%yyyy%\%mm%-%yyyy%\%dd%\spravka\
 
for /f "delims=" %%a in ('dir /b /a-d "%src%\%mask%"') do (
for %%A IN (%word%) DO (
  >nul find "%%A" < "%src%\%%~a" && move /y "%src%\%%~a" "%dest%\" >nul 2>nul
 )
)
0
tager3
5 / 5 / 3
Регистрация: 02.11.2010
Сообщений: 136
02.07.2013, 17:51  [ТС] 16
я так понял что атрибут /s играет роль поиска в каталогах?
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
02.07.2013, 23:49 17
tager3, во всех подкаталогах.
При этом заметьте, что без /S в выводе цикла будет уже не полный путь к файлу, а только его имя, поэтому в последнем коде я подставил дополнительно путь везде, где используется переменная цикла.
0
volodin661
02.09.2015, 23:22     Поиск заданных слов в файлах и выполнение определённых действий с теми файлами, в которых найдены совпадения
  #18

Не по теме:

Цитата Сообщение от Dragokas Посмотреть сообщение
Да, бывали случаи когда findstr зависала при наличии большого кол-ва открывающихся скобок в содержимом файла.
"Комсомольская правда" в 2007 году писала, что фрагменты тела индуса, написавшего программу findstr,
были найдены в большом количестве на помойках силиконовой долины запечатанными в картонные коробки дистрибутива известной операционной системы "Windows" корпорации Microsoft. Под давлением пользователей полиция штата не стала проводить расследование.

0
02.09.2015, 23:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2015, 23:22
Привет! Вот еще темы с ответами:

Составить программу выполнения заданных действий над файлами на одном us интерпретируемых командных языков ОС
Объединение в один файл всех файлов с указанным суффиксом, имеющих размер...

Поиск значения на листе и выполнение действий
Здравствуйте. Дело с vba практически никогда не имел. Срочно нужно написать...

Поиск слов в файлах
Нужно найти одно слово в большом количества php,js,txt файлах.Файлы расположены...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru