Войти

Показать полную графическую версию : [решено] проверка наличие определенного текста в файлах


shmel_sv@vk
14-07-2015, 12:44
задача, которую понятия не имею как воплотить в жизнь
есть огромное колличество тхт файлов
2015-название_файла-дополнительная_информация.txt
2015-название_файла1-дополнительная_информация1.txt
2015-название_файла2-дополнительная_информация2.txt
2015-название_файла3-дополнительная_информация3.txt
2015-название_файла4-дополнительная_информация4.txt
нужно проверить:
есть ли в этих файлах название_файла
как выдернуть в переменную примерно представляю, но не знаю как это совместить со сравнением наличия этого совппадения в самом файле и вывести в лог где нет совпадений

Iska
14-07-2015, 13:24
есть огромное колличество тхт файлов »
И все — в одном каталоге?

Упакуйте с десяток таких файлов в архив и приложите к сообщению, либо выложите на RGhost.

Georgio
14-07-2015, 13:28
@echo off

>nul chcp 1251

>"result.log" (
for /f "tokens=1,2* delims=-" %%i in ('2^>nul dir/a-d/b "*-*-*.txt"') do @(
>nul find/i "%%j" "%%i-%%j-%%k"|| echo %%i-%%j-%%k
)
)

exit/b

Foreigner
14-07-2015, 14:33
Georgio, А почему find.exe, а не findstr.exe? Последний пошустрее, имхо.

Iska
14-07-2015, 14:48
Последний пошустрее, имхо. »
Проверяли или по ощущениям?

Elven
14-07-2015, 15:21
Проверяли или по ощущениям? »
Офигеть, я проверил. Перелопатил один и тот же файл в поисках одного значения сначала так

echo begin_time %time% > find.log
find /i "com" console.log
echo end_time %time% >> find.log
потом вот так
echo begin_time %time% > findstr.log
findstr /i "com" console.log
echo end_time %time% >> findstr.log

и вот результат:
find.log
begin_time 15:17:54,11
end_time 15:18:02,64

findstr.log
begin_time 15:18:04,59
end_time 15:18:04,77

медленно мелькнула мысль что с кэша любой быстро считает, потому начал искать другое значение и сначала запустил findstr
findstr.log
begin_time 15:24:03,26
end_time 15:24:08,46

find.log
begin_time 15:24:09,86
end_time 15:24:26,70

Georgio
14-07-2015, 15:30
Foreigner, "findstr.exe" в данном контексте не будет работать с кириллицей (по крайней мере, моя версия).




Вот сам проверь:



@>nul chcp 1251

@for %%i in (
2015-название_файла1-дополнительная_информация1.txt
2015-название_файла3-дополнительная_информация3.txt
) do @>%%i rem:

@for %%i in (
2015-название_файла-дополнительная_информация.txt
2015-название_файла2-дополнительная_информация2.txt
2015-название_файла4-дополнительная_информация4.txt
) do @for /f "tokens=2 delims=-" %%j in ("%%i") do @(
>%%i echo %%j
)


@echo off

>"result.log" (
for /f "tokens=1,2* delims=-" %%i in ('2^>nul dir/a-d/b "*-*-*.txt"') do @(
>nul findstr/ilc:"%%j" "%%i-%%j-%%k"|| echo %%i-%%j-%%k
)
)

exit/b



.

Foreigner
14-07-2015, 20:10
Georgio, У меня отработало без ошибок. вин-8.1
result.log:

2015-название_файла-дополнительная_информация.txt
2015-название_файла1-дополнительная_информация1.txt
2015-название_файла2-дополнительная_информация2.txt
2015-название_файла3-дополнительная_информация3.txt
2015-название_файла4-дополнительная_информация4.txt


Версия findstr.exe:

> (gi C:\Windows\System32\findstr.exe).versioninfo | fl productversion, fileversion


ProductVersion : 6.3.9600.16384
FileVersion : 6.3.9600.16384 (winblue_rtm.130821-1623)

Iska
14-07-2015, 20:25
Foreigner, возможно в ней «findst.exe» наконец научили работать с кириллицей не только в кодовой странице 866. В XP, помнится, с этим точно были какие-то проблемы.

Foreigner
14-07-2015, 20:27
Iska, согласен, было такое

Georgio
14-07-2015, 21:59
Foreigner, у нас абсолютно одинаковые версии и Windows, и "findstr.exe".


Только в случае успеха результат моего теста должен быть таким:

2015-название_файла1-дополнительная_информация1.txt
2015-название_файла3-дополнительная_информация3.txt


,

так как именно эти файлы совсем пусты, а в остальных трёх файлах записана строка "название_файла", соответствующая части имени самих этих файлов, которую и нужно обнаружить.

Foreigner
15-07-2015, 11:15
Georgio, значит ничего не исправили. Печаль. Ущербный findstr по прежнему лажает на кириллице. Причем если батник сохранить в 866 и убрать chcp 1251, то все отрабатывает.




© OSzone.net 2001-2012