Показать полную графическую версию : findstr точный поиск
vngreez@vk
22-06-2017, 17:37
вместо /system/etc будет стоять %%a (цикл из другого файла). В зависимости от того найдено ли слово, будет выполняться условие
ФУх.. Ну так хоть объяснил?
Желательно использовать bat команды чтобы получить код возврата ошибки
x0r, Iska, greg zakharov, Весь геморой в том, что должен быть ТОЧНЫЙ поиск
возьму другой пример: /system/app
Его необходимо найти, но вместо него найдется всякий хлам:
/system/app/тырыпыры
/system/app/lib
и тд.
А мне нужной найти что я написал /system/app, он может быть и не быть записан в файл
greg zakharov
22-06-2017, 17:53
Вам уже указали на точный поиск. Вам нужно:
1) узнать есть ли строка /system/etc в файле
2) в строке после обозначенных выше символов больше ничего не встречается, т.е. /system/etc или /system/app и все, - далее прочие строки
3) если строки /system/etc нет, вернуть некий код ошибки
Так? Или предпочтете воспользовоться звонком другу не так?
vngreez@vk
22-06-2017, 18:02
greg zakharov, 2) встречаеться /system/etc/sensor u: object_r:system_sensor_data_file:s0
жирным выделил
greg zakharov
22-06-2017, 18:07
Iska, надеюсь Вы не будете против, если я пополню Ваш клуб случайно облысевших?
vngreez@vk, пардон, но искать тогда что и что в данном случае может быть "точным поиском"? Вам нужно еще "хвост" в этой строке захватить регулярным выражением?
vngreez@vk
22-06-2017, 18:21
greg zakharov, да
greg zakharov
22-06-2017, 18:38
То есть, допустим, файл:
...
/system/bin/vtservice u:object_r:vtservice_exec:s0
/system/bin/hotknot_native_service u:object_r:hotknot_native_exec:s0
/system/bin/teei_daemon u:object_r:teei_daemon_exec:s0
/system/bin/init_thh u:object_r:init_thh_service_exec:s0
/system/etc u:object_r:system_sensor_data_file:s0
/system/bin/md_monitor u:object_r:md_monitor_exec:s0
/system/bin/mvg_spoh u:object_r:mvg_spoh_exec:s0
/system/bin/fpserver u:object_r:fpserver_exec:s0
/system/app u:object_r:system_sensor_data_file:s0
...
Тогда:
@echo off
setlocal enabledelayedexpansion
set "re=/system/# u:object_r:system_sensor_data_file:s0"
for %%i in (etc app) do (
>nul findstr /l /c:"!re:#=%%i!" file.txt&&echo:%%i found
)
endlocal
exit /b
Так?
фигня кокая-то... может это багоглюк в традициях M$ :search:
file.txt :
/system/bin/mtkmal u: object_r:mtkmal_exec:s0
/system/bin/wifi2agps u: object_r:wifi2agps_exec:s0
/system/bin/wmt_loader u: object_r:wmt_loader_exec:s0
/system/etc
/system/bin/xlog u: object_r:xlog_exec:s0
/system/bin/sbchk u: object_r:sbchk_exec:s0
/system/bin/OperaMaxSystem u: object_r:tunman_exec:s0
/system/etc/sensor u: object_r:system_sensor_data_file:s0
/system/vendor/bin/pvrsrvctl u: object_r:pvrsrvctl_exec:s0
/system/xbin/BGW u: object_r:BGW_exec:s0
/system/xbin/mnld u: object_r:mnld_exec:s0
/system/bin/md_ctrl u: object_r:md_ctrl_exec:s0
/system/bin/cmddumper u: object_r:cmddumper_exec:s0
/system/app/qweee
/system/app/lib
/system/app/qewqeqwe
/system/app
1 если искать /system/etc
findstr /X /C:"/system/etc" file.txt
/system/etc
т.е. находит.
2 если искать /system/app
findstr /X /C:"/system/app" file.txt
т.е. ненаходит нифига ?:
3 если сделать через type или sort
type file.txt | findstr /X /C:"/system/app"
/system/app
sort file.txt | findstr /X /C:"/system/app"
/system/app
sort file.txt | findstr /X /C:"/system/etc"
/system/etc
то находит всегда. Это чего, дело в алфавите, в порядке расположения строк для findstr чтоле?!
upd: дошло. дело в том, что это последняя строка и там EOF. мдаааа... так что всё равно, это считай баг опции findstr /X : если искомое выражение стоит последним в файле, то не будет найдено.
megaloman
22-06-2017, 19:20
vngreez@vk, строка вида
/system/etc тырыпыры
должна быть найдена, или она ошибочная? Тогда почему?
Iska, надеюсь Вы не будете против, если я пополню Ваш клуб случайно облысевших? »
Легко! :)
Вся королевская конница,
Вся королевская рать…
greg zakharov
22-06-2017, 19:39
Вся королевская конница,
Вся королевская рать…
Не может Шайтана, не может Болтая,
Шайтана-Болтая собрать...
В данном случае — не Болтая.
megaloman
22-06-2017, 21:18
vngreez@vk, Что здесь не так? @Echo Off
Cls
Set "FileIn=Z:\Box_Arc\file\file.txt"
Set "Spisok=/system/etc /system/app /system/bin"
FOR %%f IN (%Spisok%) DO More "%FileIn%" | findstr.exe /l /N /c:"%%~f "
pause
vngreez@vk
23-06-2017, 13:01
x0r, megaloman, Iska, greg zakharov, шутки шутками, я вот не могу понять что тут сложного: найти слово точно.
Вообщем сам нашел решение и сделал вот так:
set "fixFileContext=file.tx"
set "sysFiles=sorerzimoe.txt"
for /F "usebackq tokens=1-5 delims= " %%a in ("%sysFiles%") do (
findstr /B "^/%%a\>" %fixFileContext% && (
for /f %%f in ('find "%%a" %fixFileContext%') do (
if "%%a"=="%%f" ( код...
Всем спасибо за помощь
и пополнения словаря шутак
vngreez@vk,
ну да, ну да
если в file.txt (неправильно расширение в коде - опечатка) строка /system/etc,
а в sorerzimoe.txt то что в шапке темы (имееться файл file.txt, вот его содержимое)
то даже это уже не работает, что говорит о том что свой код вы даже не запускали ни разу
и зачем остальные четыре токена?
@echo on
set "fixFileContext=file.txt" &: Здесь опечатка в расширении была
set "sysFiles=sorerzimoe.txt"
:: Дальше темный лес, уже это не работает
for /F "usebackq tokens=1-5 delims= " %%a in ("%sysFiles%") do findstr /B "^/%%a\>" %fixFileContext%
pause
если поменять содержимое текстовиков наоборот
в file.txt как в шапке, а в sorerzimoe.txt строка "/system/etc /system/app /system/bin"
то точно также не работает
покажите содержимое обоих файлов, полный код и скриншот окна cmd где видно что найдено то что нужно.
кстати
и пополнения словаря шутак »
относится к вашему второму for
например file.txt содержит строку: slovo
вот аналог второго for
@echo off
set "a=slovo"
for /f %%f in ('find "%a%" file.txt') do if "%a%"=="%%f" echo %a% естественно равно %%f
pause
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.