View previous topic :: View next topic |
Author |
Message |
BeardFury78
Joined: 25 Aug 2016 Posts: 213
|
(Separately) Posted: Sun Jul 22, 2018 23:27 Post subject: Запуск из батника опции поиска файлов по файл-списку |
|
|
Есть некий батник. В конце результата создается файл со списком путей файлов (а именно g:\result.txt). Нужно добавить в конце батника команду чтобы открывался Total Commander и запустил поиск по файлу чтобы в результате вывелись файлы по списку путей. Возможно ли и как? |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Jul 22, 2018 23:55 Post subject: |
|
|
BeardFury78
А зачем? Что в батнике? У нас есть топики по теме (1, 2, 3 и т. д.).
Создаётся шаблон FileList c @<путь к списку> для поля "Место поиска:".
Строка запуска из батника: TOTALCMD.EXE /S=F:LFileList
Но лучше из vbs, чтобы запустить поиск с выводом на панель, предварительно сделав это:
Code: | With CreateObject("WScript.Shell")
PID = .Exec("%COMMANDER_EXE% /S=F:LFileList").ProcessID
Do: A = .AppActivate(PID) :Loop Until A : .SendKeys "~%-"
End With |
_________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
BeardFury78
Joined: 25 Aug 2016 Posts: 213
|
(Separately) Posted: Mon Jul 23, 2018 07:36 Post subject: |
|
|
Flasher
В батнике такой скрипт
Code: | del /s g:\result.txt
split -l 8500 -a 4 g:\patterns.txt
for %%f in (g:\x????) do (
grep -if %%f g:\paths.txt >> g:\result.txt
)
del /s g:\x???? |
Просто нужно время от времени запускать поиск по определенному файлу, а он слишком большой, нужно разбивать на части. И вот захотелось потом запускать автоматически Total Commander с поиском по файлу-результату. Вашу команду попробовал, запустился Total Commander со строкой в поле поиска, приходится вручную запускать, но ничего. Спасибо большое за подсказку![/quote] |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Jul 23, 2018 14:06 Post subject: |
|
|
BeardFury78
Так зачем вручную, если я vbs дал?
И зачем в батнике вообще перебор в цикле? Сам grep не справляется с поисками?
Можно второй строкой прописать команду, если лень с самим vbs заморачиваться:
Code: | .Run "%COMMANDER_PATH%\Utils\busybox.exe grep -f g:\patterns.txt -hriw g:\paths.txt>g:\result.txt", 0, 1 | busybox — утилита-комбаин вместо Cygwin-ов, MinGW, Gow, UnxUtils и т. п. сборников. Функционал несколько урезан, но как правило в повседневке хватает. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
BeardFury78
Joined: 25 Aug 2016 Posts: 213
|
(Separately) Posted: Mon Jul 23, 2018 15:27 Post subject: |
|
|
Flasher
В том и дело. что файлы (паттерн и список) слишком большие, памяти не хватает, приходится разбивать файл паттерна на куски. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Jul 23, 2018 15:33 Post subject: |
|
|
BeardFury78
Ну, сколько весят файлы и сколько свободной памяти?
Там ниже busybox64.exe предлагается. С ней как?
На первый вопрос ответа не вижу. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
BeardFury78
Joined: 25 Aug 2016 Posts: 213
|
(Separately) Posted: Mon Jul 23, 2018 16:52 Post subject: |
|
|
Flasher
Файл паттерн - 50 мб, файл-список - 100 мб. Поиск сразу занимает больше 5 гб и Windows зависает. Был бы рад перескочить на vbs, если бы там был скрипт аналогичный батнику, а самостоятельно ваять не умею. У меня Cygwin установленный, busybox имхо мне не нужен, аналогичные же утилиты, смысл плодить утилиты не вижу... |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Jul 23, 2018 17:35 Post subject: |
|
|
BeardFury78
Поиск предложенной мной строкой?
В батнике if, а у меня ключ -f. Советую сверить показания.
Как можно писать ерунду про аналогичные утилиты? busybox - это одна независимая портабельная программа с жалкими 475 либо 541 килобайтами, а Cygwin - это целый установочный пакет программ и библиотек с кучей всякого другого ненужного барахла (в т. ч. в реестре) с весом под 110 и более мегабайт. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
BeardFury78
Joined: 25 Aug 2016 Posts: 213
|
(Separately) Posted: Mon Jul 23, 2018 18:01 Post subject: |
|
|
Flasher
И без ключа i тоже зависает, да и нужен мне этот ключ чтобы находило вне зависимости от регистра... |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Jul 23, 2018 18:19 Post subject: |
|
|
BeardFury78
Не знал, что перед f может учитываться ещё что-то. Вообще ключи r и w (у меня есть) тоже нужны.
Позже посмотрю, что лучше: sqlite3, LogParser или OLEDB.4.0.
А пока можно путь к своему батнику прописать вместо первого параметра приведённой строки.
Какая кодировка у файлов, кстати? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
BeardFury78
Joined: 25 Aug 2016 Posts: 213
|
(Separately) Posted: Mon Jul 23, 2018 18:50 Post subject: |
|
|
Flasher
Сделал так
Code: | .Run "g:\pathssearch.bat", 0, 1
With CreateObject("WScript.Shell")
PID = .Exec("%COMMANDER_EXE% /S=F:LFileList").ProcessID
Do: A = .AppActivate(PID) :Loop Until A : .SendKeys "~%-"
End With |
Наверное не правильно сделала, ибо выдает ошибку:
Quote: | Строка: 1
Символ: 3
Ошибка: Неверная или неквалифицированная ссылка |
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Jul 23, 2018 18:51 Post subject: |
|
|
Flasher wrote: | Можно второй строкой прописать команду ... | А не первой. Нужна вставка между первой и второй.
Также см. вопрос выше.
BeardFury78 wrote: | Наверное не правильно сделала | Это не опечатка? Жена под ником мужа орудует? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
BeardFury78
Joined: 25 Aug 2016 Posts: 213
|
(Separately) Posted: Mon Jul 23, 2018 19:32 Post subject: |
|
|
Flasher
Виноват, опечатался
Скрипт заработал.
Кодировка у файлов UTF-8 with BOM. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Jul 23, 2018 19:35 Post subject: |
|
|
BeardFury78
А пункт с TCKB выполнен? Файлы на панель вываливаются?
С кодировкой ясно. Значит, OLEDB отпадает.. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
BeardFury78
Joined: 25 Aug 2016 Posts: 213
|
(Separately) Posted: Mon Jul 23, 2018 20:07 Post subject: |
|
|
Эх, форум во время отправки сообщения засбоил и долго не пускал, пришлось по новой набирать...
Как оказалось, строки 5664 в WCMD_RUS.INC имела вид
Quote: | 5664="Ф&айлы на панель"
|
Решил просто сделать
Quote: | 5664="Ф&айлы &- на панель" |
После этого закрыл Тотал, запустил скрипт и после этого Тотал запустился, но в фоне, пришлось кликать на иконку, там оказалось окно поиска, но не в стадии процесса поиска, все еще нужно кликать на кнопку поиска.
Потом еще раз запустил скрипт, но внутри Тотала и я уже не закрывал программу и стал ждать. После завершения скрипта открылось окно поиска, но опять ничего не нажалось. Но после того как я закрыл это окно, то создалось еще одно новое окно поиска, но с пустым полем "Место поиска" и кнопка нажалась, но поиск велся по всем дискам компьютера. Такая вот история.
Убрал первый амперсанд у строки (который после Ф идет), не помогло, симптомы те же. Еще раз запустил скрипт, специально дождался окна поиска и после этого еще 5 минут прождал, кнопка не нажалась, но после закрытия еще раз создалось окно и немедленно начало поиск по компьютеру.
Как оказалось, был конфликт, в батнике на последней строке было
Code: | "e:\Programs Files\Total Commander\TOTALCMD64.EXE" /S=F:Lsearchpaths |
в vbs
Code: | PID = .Exec("%COMMANDER_EXE% /S=F:LFileList").ProcessID
|
убрал в батнике последнюю строку и на этот раз создалось только окно поиска с пустым полем и с поиском по всему компьютеру. Что не так сделано?
Батник полностью:
Code: | del /s g:\result.txt
split -l 8500 -a 4 g:\patterns.txt
for %%f in (g:\x????) do (
grep -if %%f g:\paths.txt >> g:\result.txt
)
del /s g:\x???? |
Скрипт полностью
Code: | With CreateObject("WScript.Shell")
.Run "g:\pathssearch.bat", 0, 1
PID = .Exec("%COMMANDER_EXE% /S=F:LFileList").ProcessID
Do: A = .AppActivate(PID) :Loop Until A : .SendKeys "~%-"
End With[quote][/quote] |
Блин, торможу... сейчас еще проверю. |
|
Back to top |
|
|
|