Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] проверка наличие определенного текста в файлах (http://forum.oszone.net/showthread.php?t=302409)

shmel_sv@vk 14-07-2015 12:44 2528692

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

Iska 14-07-2015 13:24 2528708

Цитата:

Цитата shel_sv@vk
есть огромное колличество тхт файлов »

И все — в одном каталоге?

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

Georgio 14-07-2015 13:28 2528710

Код:

@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 2528737

Georgio, А почему find.exe, а не findstr.exe? Последний пошустрее, имхо.

Iska 14-07-2015 14:48 2528746

Цитата:

Цитата Foreigner
Последний пошустрее, имхо. »

Проверяли или по ощущениям?

Elven 14-07-2015 15:21 2528779

Цитата:

Цитата Iska
Проверяли или по ощущениям? »

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

Код:

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 2528785

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 2528867

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 2528873

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

Foreigner 14-07-2015 20:27 2528875

Iska, согласен, было такое

Georgio 14-07-2015 21:59 2528914

Foreigner, у нас абсолютно одинаковые версии и Windows, и "findstr.exe".


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

Цитата:

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

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

Foreigner 15-07-2015 11:15 2529027

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


Время: 11:44.

Время: 11:44.
© OSzone.net 2001-