Навеяно этой темой. Скрипт сканирует указанную в ScanDir папку с подкаталогами (глубина сканирования указана в ScanDpt). Для файлов с расширениями, указанными в ScanTyp будут созданы ярлыки и помещены по пути, указанному в PathLnk. Допускаются пробелы в пути (в скобки заключать не нужно) и кириллица.
Сам скрипт
Сам скрипт
ENVI ScanDir=B:\TEMP //Указываем папку для сканирования ENVI ScanDpt=2 //Указываем глубину сканирования папок ENVI ScanTyp=exe cmd bat //Указываем расширения, для которых будут созданы ярлычки ENVI PathLnk=B:\lnk //Указываем папку, в которой будут созданы ярлычки ////////////////////////////////////////////////////////////// IFEX %PathLnk%,!PATH %PathLnk% //Если папка-получатель отсутствует, создадим её FORX* %ScanTyp%,TEnvi, //Перебираем типы файлов, текущий используем в %TEnvi% {* ENVI SCAN=FORX /S:%ScanDpt% %ScanDir%\*.%TEnvi% //Создаем процедуру сканирования заданного типа и заданной глубины %SCAN%,DEnvi,0, //Сканируем, путь найденного файла в переменной DEnvi {* FNAM NEnvi=%DEnvi% //Из полного пути получаем имя файла (без расширения) LINK %PathLNK%\%NEnvi%,%DEnvi% //Создаем ярлык }} MESS FINISHED //Усё готово, ШЕФ!
400 ярлыков для папки с прогами на РАМ-диске создал примерно за секунду.
conty9 Скрипт работает четко ! Подскажите, как указать переменную для поиска своей папки с программами по всем разделам в ENVI ScanDir ? Спасибо. upd. в хэлпе с налета не нашел, но методом тыка задачу решил - ENVI ScanDir=\путь_к_папке\папка
lex, немного изменил скрипт, чтобы меньше раз шастало по папкам. Теперь вначале перебираются папки, а в них сразу ищем все типы файлов. Ну и плюс %ScanDir% на всех разделах ищется.
Скрипт, версия 2
Скрипт, версия 2
ENVI ScanDir=temp2 //Указываем папку для сканирования (будут найдены ВСЕ корневые папки с этим именем, если папка не корневая, указываем путь к ней от корня, например, 2k10\Programs-2k10\Programs.USER ) ENVI ScanDpt=3 //Указываем глубину сканирования папок (1 - сканировать только в папке %ScanDir%, подкаталоги не обрабатывать) ENVI ScanTyp=exe cmd bat //Указываем расширения, для которых будут созданы ярлычки ENVI PathLnk=B:\lnk //Указываем папку, в которой будут созданы ярлычки (%Desktop% - рабочий стол) ////////////////////////////////////////////////////////////// IFEX %PathLnk%,!PATH %PathLnk% //Если папка-получатель отсутствует, создадим её FORX @\%ScanDir%,TEnvi,0, //Сканируем все диски на корневую папку %ScanDir% {* FORX* %ScanTyp%,DEnvi, //Перебираем расширения, текущий используем в %DEnvi% {* ENVI SCAN=FORX /S:%ScanDpt% %TEnvi%\*.%DEnvi% //Создаем процедуру сканирования заданной глубины для текущего расширения %SCAN%,XEnvi,0, //Сканируем, путь найденного файла в %XEnvi% {* FNAM NEnvi=%XEnvi% //Из полного пути получаем имя файла (без расширения) LINK %PathLNK%\%NEnvi%,%XEnvi% //Создаем ярлык }}}
Если у кого-то скрипт не работает, значит, слишком старая версия PECMD. Комментарии (всё после //) можно удалить. ))
Вариант с несколькими путями для обработки, разделитель #
Вариант с несколькими путями для обработки, разделитель #
ENVI ScanDir=XMPE\Programs#2k10\Programs-2k10#_WIN\Utilites //Указываем пути, разделителем служит символ "#" (в пути его быть не должно), поддерживаются пути с пробелами ENVI ScanDpt=3 ENVI ScanTyp=exe cmd bat ENVI PathLnk=B:\lnk ////////////////////////////////////////////////////////////// IFEX %PathLnk%,!PATH %PathLnk% CALC #QEnvi=1 //Начнём с первого пути LOOP #%QEnvi%=%QEnvi%, //Вечный цикл )) {* MSTR -delims:# SEnvi=<%QEnvi%>%ScanDir% //Организуем перебор вариантов пути с разделителем "#" FIND $%SEnvi%=,EXIT LOOP!CALC #QEnvi=%QEnvi%+1 //Если пути закончились, выход! А иначе - следующий путь FORX @\%SEnvi%,TEnvi,0, {* FORX* %ScanTyp%,DEnvi, {* ENVI SCAN=FORX /S:%ScanDpt% %TEnvi%\*.%DEnvi% %SCAN%,XEnvi,0,TEAM FNAM NEnvi=%XEnvi%|LINK %PathLNK%\%NEnvi%,%XEnvi% }}}
Вариант с несколькими путями для обработки, разделитель пробел
Вариант с несколькими путями для обработки, разделитель пробел
ENVI ScanDir=XMPE\Programs 2k10\Programs-2k10 _WIN\Utilites //Указываем пути, разделителем служит пробел, поэтому не поддерживаются пути с пробелами ENVI ScanDpt=3 ENVI ScanTyp=exe cmd bat ENVI PathLnk=B:\lnk ////////////////////////////////////////////////////////////// IFEX %PathLnk%,!PATH %PathLnk% CALC #QEnvi=1 LOOP #%QEnvi%=%QEnvi%, {* MSTR SEnvi=<%QEnvi%>%ScanDir% FIND $%SEnvi%=,EXIT LOOP!CALC #QEnvi=%QEnvi%+1 FORX @\%SEnvi%,TEnvi,0, {* FORX* %ScanTyp%,DEnvi, {* ENVI SCAN=FORX /S:%ScanDpt% %TEnvi%\*.%DEnvi% %SCAN%,XEnvi,0,TEAM FNAM NEnvi=%XEnvi%|LINK %PathLNK%\%NEnvi%,%XEnvi% }}}
Количество путей и количество расширений не ограничено. Как, при желании, и глубина сканирования. Главное - не перестараться, чтобы не было "всё небо в попугаях" (рабочий стол).
Последний раз редактировалось: Гость (2020-03-02 22:16), всего редактировалось 1 раз
После долгого затишья обновился PeCMD, до версии PECMD2012.1.88.05.82Stable-180149_202004 (по ссылке оригинальная китайская версия, перезалил её для удобства на upload.ee). Из замеченного интересного: добавлено получение всей инфы о всех устройствах (FDRV <VarName>=? //to return all MS-DOS device names of the system).
Такой вот выхлоп добавленного ключа - TEAM FDRV TEnvi=?|MESS %TEnvi%
Такой вот выхлоп добавленного ключа - TEAM FDRV TEnvi=?|MESS %TEnvi%
KisPavVlad, английского репака пока нет. По-сути, локализированный вариант отличается только вшитой справкой и видом меню. На первых страничках темы это обсуждалось. Для работы достаточно самого PECMD.EXE. Но для уменьшения размера из него часто удаляют вшитые справку, драйвер ImDisk, прочее. Мой совет: если не уверены, что вам нужны новые "фишки" (добавленные возможности) - лучше не обновляйте.
Подскажите, есть две папки Sources на двух разных дисках, нужно вывести в разные переменные пути к файлам setup.exe из этих sources, буквы дисков могут оказаться любыми, может можно использовать маркерный файл, что бы отличить одну папку source от другой? Возможно ли так? Цель такая: одной кнопкой запустить \sources\setup.exe с одного диска, второй кнопкой \sources\setup.exe из другого диска
Valek271183, конечно, можно использовать маркерный файл. Просто создать в той же Sources файл с именем mysetup.01, к примеру. А в другой такой же папке - mysetup.02. Получить путь из полного пути к setup.exe позволяет команда FNAME с каким-то ключом. Потом проверка IFEX - если имеется %путь%\mysetup.01, значит, первый набор. А можно в самом файле-маркере указать номер комплекта, команда READ позволяет прочесть содержимое в переменную. Тогда имена маркеров будут одинаковыми, а содержимое - разным.
Не удобно спрашивать ещё раз, но у меня не получается разобраться. Как получить путь из полного пути к setup.exe ? Из примера в справке прочитал, что в fNam нужно указывать букву диска, получается нужно поочерёдно указывать все буквы дисков? И потом fNam будет путём для маркерного файла, а мне нужен путь до setup.exe, лежащий с маркерным файлом. conty9, можете показать на примере как это будет выглядеть, я уже пол дня сижу - не могу разобраться, не знаю, что дальше делать?
Valek271183, примерно так:FORX !Sources\setup.exe,MyPath,0, //Перебираем все имеющиеся диски (в обратном порядке), ищем Sources\setup.exe {* FDIR FoldP=%MyPath% //Если найдено,присваиваем путь к setup.exe переменной %FoldP% IFEX %FoldP%\MyMark.txt,READ %FoldP%\MyMark.txt,1,MyText!EXIT - //Если имеется %FoldP%\MyMark.txt, тогда читаем в переменную %MyText% содержимое первой строки этого файла. Если такого файла нет, игнорируем этот дистриб и продолжаем поиск setup.exe MESS Путь к дистрибу: %MyPath%\nПапка дистриба: %FoldP%\nМетка дистриба: %MyText% //Выводим сообщение ENVI Dist%MyText%=%MyPath% //Присваиваем путь к дистрибу переменной Dist%MyText%. Т.е., если в MyMark.txt указан номер дистриба 1 или 2, тода получим %Dist1%=путь к первому дистрибу, а в %Dist2%=путь к второму дистрибу }В папке дистриба ложим файл MyMark.txt (имя, естественно, произвольное). В нём текст - например, 1 или 2, чтобы обозначить, какой дистриб. Если такого файла нет, значит, дистриб - левый и будет проигнорирован (пропущен в поиске).
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы