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

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

Viberezh 13-10-2017 13:30 2770294

Создание макси для Total Commander
 
Добрый день. Перейду сразу к сути дела. Необходим батник, который сохранял бы имена файлов из папки в которой лежит в текстовой документ, блокнот например.
Теперь подробнее. Есть некая папка, где лежит n-ное количество файлов в одном расширении, имена у всех разные по типу ABV#123456.qst букв может быть и больше, так вот, надо чтобы батник заменял часть имени идущую с "#" на "*", то есть ABV* и сохранял результат по всем файлам в текстовой документ, чтобы конечный результат выглядел следующим образом в одну строку: abv* abc* asd* ghj*... и тд. Такое возможно?

Iska 13-10-2017 14:50 2770306

На WSH:
Скрытый текст
Код:

Option Explicit

Dim strSourceFolder

Dim objFSO
Dim objFile

Dim strValue


If WScript.Arguments.Count = 1 Then
        strSourceFolder = WScript.Arguments.Item(0)
       
        Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
       
        If objFSO.FolderExists(strSourceFolder) Then
                With WScript.CreateObject("VBScript.RegExp")
                        .Pattern = "(.+)#.*"
                       
                        For Each objFile In objFSO.GetFolder(strSourceFolder).Files
                                If .Test(objFile.Name) Then
                                        If IsEmpty(strValue) Then
                                                strValue = .Execute(objFile.Name).Item(0).Submatches.Item(0) & "*"
                                        Else
                                                strValue = strValue & " " & .Execute(objFile.Name).Item(0).Submatches.Item(0) & "*"
                                        End If
                                End If
                        Next
                       
                        With objFSO.CreateTextFile(objFSO.BuildPath(strSourceFolder, "Result.txt"))
                                .Write strValue
                                .Close
                        End With
                End With
        Else
                WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
                WScript.Quit 2
        End If
       
        Set objFSO = Nothing
Else
        WScript.Echo "Usage: wscript.exe """ & WScript.ScriptName & """ <Source folder>"
        WScript.Quit 1
End If

WScript.Quit 0


Исходная папка задаётся параметром скрипта. Для Total Commander можно использовать меню запуска, панель инструментов и т.п. с аргументом «"%P"».

А что Вы потом с содержимым этого файла делать будете?

Viberezh 13-10-2017 17:41 2770347

Iska, Не работает, либо я делаю что то не так. Файл нужен для создания шаблона маски в тотале для последующего копирования файлов по нему.

Iska 13-10-2017 18:19 2770356

1. Скопируйте код в буфер обмена.
2. Откройте Блокнот.
3. Вставьте скопированный код из буфера обмена в Блокнот.
4. Сохраните содержимое Блокнота в любую папку под любым именем, с расширением «.vbs» в кодировке ANSI/1251.
5. В Total Commander'е добавьте новый пункт меню «Запуск» в виде:
Скрытый текст

где:
1) название пункта меню;
2) имя интерпретатора скриптов («wscript.exe» или «сscript.exe»);
3) путь и имя к сохранённому в п.4. файлу с кодом;
4) параметр скрипта, куда при исполнении Total Commander вместо «%P» подставит текущий путь с активной панели.

6. Выберете пункт меню, находясь в искомом каталоге:
Скрытый текст

7. Обновите активную панель, нажав Ctrl-R, дабы увидеть файл с результатами «Result.txt»:
Скрытый текст


P.S. Понял Вашу задумку — \Выделение\Загрузить выделение из файла, оно?

Viberezh 13-10-2017 22:26 2770393

Сделал всё по инструкции.

Вот для этого надо.

Iska 14-10-2017 00:05 2770418

Цитата:

Цитата Viberezh
Сделал всё по инструкции. »

Почти. Угловые кавычки вокруг %P — лишние. Смотрите, в моём примере их нет:
Скрытый текст

— только обычные двойные. Вероятно Вы взяли их из текста п.5.4 — не надо, уберите угловые и оставьте только двойные.

Viberezh 14-10-2017 11:32 2770467

Iska, спасибо большое, всё работает! А чтобы скрипт работал в тотале с флешки его лучше в папку с тоталом закинуть, и не будет ли конфликта пути с буквой флешки на разных компах?

Iska 14-10-2017 11:53 2770471

Цитата:

Цитата Viberezh
и не будет ли конфликта пути с буквой флешки на разных компах? »

Будет.

Цитата:

Цитата Viberezh
его лучше в папку с тоталом закинуть »

Не стоит его захламлять. Лучше создайте внутри какой-нибудь каталог, например, «My Scripts», и поместите скрипт туда. Тогда путь может выглядеть как «"%COMMANDER_PATH%\My Scripts\Имя скрипта.vbs"»:
Скрытый текст

Viberezh 14-10-2017 12:01 2770472

Iska, Огромное спасибо! Всё прекрасно работает!

Iska 14-10-2017 12:13 2770476

Viberezh, а знаете, как всё вышеизложенное выглядит в Far Manager'е, включая и само выделение файлов?
Код:

lua:Keys('Add CtrlY') print('/.+#.*/') Keys('Enter')
И всё :).

Viberezh 14-10-2017 12:25 2770480

Iska, забавно, но фаром не пользуюсь :)

Iska 14-10-2017 12:47 2770484

Viberezh, ну, мало ли. Вдруг когда-нибудь дозреете ;).

Iska 14-10-2017 17:06 2770539

Viberezh, я решил Вас ещё побеспокоить. Вы уверены, что Вам точно нужен такой вот путь: скрипт→файл с масками→загрузить маски для выделения? В Total Commander ведь тоже есть регулярки для выделения:
Скрытый текст

не?! Один раз создать шаблон, затем пользоваться.

Viberezh 14-10-2017 19:36 2770580

Iska, это создаст шаблон маски файлов с # в имени?

Iska 14-10-2017 19:41 2770583

Цитата:

Цитата Viberezh
Iska, это создаст шаблон маски файлов с # в имени? »

Да. По этому шаблону будут выделены файлы с не менее чем одним символом до знака #, и с произвольным количеством символов (в том числе нулевым) — после.

Viberezh 14-10-2017 19:47 2770588

Iska, такой вариант не подойдёт, суть даже не в решетке а в самих буквах. По файлам запроса создается маска с помощью скрипта и с её помощью копируются необходимые файлы пополнения.

Iska 14-10-2017 20:23 2770596

Viberezh, почему нет? В чём разница?

Viberezh 15-10-2017 13:19 2770720

Iska, потому что есть 2 типа файлов: "запрос" и "пополнение". У каждого информационного банка (ИБ) есть свой файл запроса, пусть ИБ называется "Abv", то файл запроса будет выглядеть условно "abv#1234.qst", соответственно в комплекте может быть несколько ИБ и чтобы их обновить нужны соответствующие файлы пополнения, вот для этого и нужна маска, чтобы отфильтровать отсутствующие в комплекте ИБ.

Iska 15-10-2017 13:58 2770728

Viberezh, Вы точно на мои вопросы отвечали? Впрочем, ладно, оставим. Если Вам удобнее так, то делайте так. Хотя я лично не вижу никакой разницы.

Viberezh 15-10-2017 15:31 2770755

Iska, разница есть, по вашему второму способу выделятся все файлы с решеткой, но дело в том, что они все с решеткой и нужно отсеивать лишние.

Iska 15-10-2017 16:11 2770762

Цитата:

Цитата Viberezh
Iska, разница есть, по вашему второму способу выделятся все файлы с решеткой »

Viberezh, и по первому — тоже:
Код:

.Pattern = "(.+)#.*"
И впоследствии, по полученным из шаблона маскам «(.+)*» — не только с решёткой. Насколько я понимаю.

Цитата:

Цитата Viberezh
но дело в том, что они все с решеткой и нужно отсеивать лишние. »

Если расскажете словами и покажете на примерах — как получить только то, что надо и отсеять всё лишнее, то подумаем.

Viberezh 17-10-2017 11:42 2771224

Iska, вот исходные файлы по которым нужно создать маску, то есть оставить только буквы в именах.
Скрытый текст

А вот файлы из множества которых надо выделить только подходящие по маске.
Скрытый текст

Скрипт работает прекрасно и вполне удобен или вы хотите найти более изящное решение?

Iska 17-10-2017 12:16 2771231

Viberezh, предлагаете найти мне на картинках десять отличий™, да ещё и с пропорциональными шрифтами? Увольте. Текст нужен.

Viberezh 17-10-2017 12:22 2771237

Iska, текст чего?

Iska 17-10-2017 13:02 2771251

Viberezh, тех имён файлов, что приведены выше на изображениях из сообщения №22.

Viberezh 17-10-2017 13:08 2771254

Iska, это просто пример. Я не понимаю что вы хотите сделать. Файлы всегда разные. Первоначальная задача стояла в том, чтобы из выборки имен файлов убрать лишнюю информацию и предоставить результат в таком виде, чтобы можно было вставить в строку поиска. Буквы буквы и ещё раз буквы это всё что требовалось оставить из названий файлов, с чем скрипт и справляется.
PS. Маска мне нужна не для единичного случая и каждый раз она будет разная.

Iska 17-10-2017 13:28 2771260

Цитата:

Цитата Viberezh
Я не понимаю что вы хотите сделать. Файлы всегда разные. »

Я не могу понять, как Вы делаете выборку потребных файлов среди прочих. Посему предложил, чтобы Вы сделали а) перечень всех файлов, б) перечень файлов из а), которые подлежат выборке, дабы попытаться хотя бы таким путём найти закономерности в отличиях а) от б).

Я вот вижу на втором скриншоте файл CONS#DD1016#0000.ANS, на первом — нет. Однако же он преотлично отбирается скриптом:
Скрытый текст

хотя Вы говорите, что нет.

Цитата:

Цитата Viberezh
PS. Маска мне нужна не для единичного случая и каждый раз она будет разная. »

Э… Вы там «ручками» ещё что-то потом делаете с результатом?

Viberezh 17-10-2017 13:35 2771263

Iska, это всё надо чтобы обновлять Консультант+. Выборка обусловлена комплектом, установленным у клиента. По файлам с расширением "qst" я делаю маску скриптом и потом копирую по маске файлы с расширением "ans" чтобы обновление сделать. Так понятней?
Цитата:

Цитата Iska
Э… Вы там «ручками» ещё что-то потом делаете с результатом? »

Копирую результат в тотал.

Iska 17-10-2017 13:47 2771269

Цитата:

Цитата Viberezh
Iska, это всё надо чтобы обновлять Консультант+. »

Это-то понятно, чай Консультант+ широко известный продукт.

Цитата:

Цитата Viberezh
Выборка обусловлена комплектом, установленным у клиента. По файлам с расширением "qst" я делаю маску скриптом и потом копирую по маске файлы с расширением "ans" чтобы обновление сделать. Так понятней? »

Нет. Ладно, забудем, мы не понимаем друг друга.

alpap 17-10-2017 15:19 2771299

Цитата:

Цитата Viberezh
По файлам с расширением "qst" я делаю маску скриптом »

1. Варианты имен файлов, а лучше командой: tree /f "Папка с файлами">list.txt и сюда его в архиве
2. Ваш вариант маски посмотреть, скрипт тоже сюда

Viberezh 17-10-2017 19:26 2771342

Цитата:

Цитата alpap
2. Ваш вариант маски посмотреть, скрипт тоже сюда »

В начале темы скрипт.

alpap 17-10-2017 20:17 2771356

Цитата:

Цитата Viberezh
В начале темы скрипт »

да, со зрением не очень, может ссылку дадите на пост ВАШЕГО скрипта и что по пункту 1 и варианту маски.

Viberezh 17-10-2017 20:49 2771368

Цитата:

Цитата alpap
да, со зрением не очень, может ссылку дадите на пост ВАШЕГО скрипта и что по пункту 1 и варианту маски. »

Моего скрипта тут нет. Есть скрипт товарища Iska.
По пункту 1 зачем что-то кидать? Вариантов файлов тьма, масок тоже, задача была же решена, зачем продолжать копаться.


Время: 10:59.

Время: 10:59.
© OSzone.net 2001-