Показать полную графическую версию : [решено] проверка наличие определенного текста в файлах
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
нужно проверить:
есть ли в этих файлах название_файла
как выдернуть в переменную примерно представляю, но не знаю как это совместить со сравнением наличия этого совппадения в самом файле и вывести в лог где нет совпадений
есть огромное колличество тхт файлов »
И все — в одном каталоге?
Упакуйте с десяток таких файлов в архив и приложите к сообщению, либо выложите на RGhost.
@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? Последний пошустрее, имхо.
Последний пошустрее, имхо. »
Проверяли или по ощущениям?
Проверяли или по ощущениям? »
Офигеть, я проверил. Перелопатил один и тот же файл в поисках одного значения сначала так
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
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)
Foreigner, возможно в ней «findst.exe» наконец научили работать с кириллицей не только в кодовой странице 866. В XP, помнится, с этим точно были какие-то проблемы.
Foreigner
14-07-2015, 20:27
Iska, согласен, было такое
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.