Запуск скрипта из папки
Находясь в папке нажимаю пкм и запускаю скрипт (находящийся в другом месте, например в C:\Windows), как сделать так, чтобы скрипт как бы запустился из этой папки
|
Цитата:
|
У меня есть скрипт cmd, который находясь в папке и запускаясь из неё производит определённые действия в этой папке, я хочу, чтобы находясь в любой папке я правой кнопкой из меню вызывал бы этот скрипт, и он бы отрабатывал, как бы находясь в этой папке. Сам скрипт я положил в C:\Windows, запускаю его через vbs, чтоб не мелькало консольное окно, добавил пункт в меню, который запускает этот vbs,, и он запускается и конечно запускает сам cmd, но из всех команд cmd отрабатывают только те, которые меняют атрибуты в той папке и атрибуты самой папки, той, где я нахожусь, остальные команды не отрабатывают, может есть возможность как то скопировать, что ли это cmd в папку, запустить его, он отработает, потом удалить его командой из этого же cmd
|
BOBAT, Я правильно понимаю: vbs запускает cmd? Где vbs (хотелось бы на него взглянуть)? Где cmd? В vbs явно прописан путь к cmd? В самом cmd нигде нет ссылки на его путь, что-то типа
%~dp0 ? |
BOBAT, тогда для начала приведите а) код пакетного файла, б) код скрипта WSH, в) опишите, как именно Вы реализовали:
Цитата:
|
Код zapusk.vbs
Код:
Set WshShell = CreateObject("WScript.Shell") Код:
@Echo Off Код:
[HKEY_CLASSES_ROOT\Directory\Background\shell\HHFF] |
BOBAT, ясно. Понимаете, в чём дело… Скрипт у Вас находится в каталоге %SystemRoot%, пакетный файл, надо полагать, там же, рядом с ним (иначе Вы его таким кодом не запустите). Пакетный файл (из какой бы папки Вы не запускали скрипт) считает целевым каталогом тот, в котором находится сам (Set fldr=%~dp0), и всякий раз отрабатывает на том же каталоге %SystemRoot%.
Для начала давайте избавимся от пакетного файла вовсе. Назовём скрипт «Attach Icon to Folder.vbs» и поместим его в собственный каталог «Attach Icon to Folder» в «%ProgramFiles%»: C:\Program Files\Attach Icon to Folder\Attach Icon to Folder.vbs
Код:
Option Explicit Для внедрения в контекстное меню используем следующий файл реестра: Код:
Windows Registry Editor Version 5.00 Сохраните скрипт по указанному месту, импортируйте файл реестра в реестр, пользуйте. P.S. Но идея реализации мне всё равно категорически не нравится. Я бы привязывался не к папке (HKEY_CLASSES_ROOT\Directory\Background), а к файлам *.ico — так будет и правильнее, и надёжнее, и позволит указать конкретный файл ico, если их будет несколько. |
Цитата Iska:
Понимаете, в чём дело… Скрипт у Вас находится в каталоге %SystemRoot%, пакетный файл, надо полагать, там же, рядом с ним (иначе Вы его таким кодом не запустите). Пакетный файл (из какой бы папки Вы не запускали скрипт) считает целевым каталогом тот, в котором находится сам (Set fldr=%~dp0), и всякий раз отрабатывает на том же каталоге %SystemRoot%. » Я думал, может быть, если vbs как то определит каталог запуска, то може быть он и скопирует мой cmd в этот каталог и запустит его оттуда, а cmd в этой папке отработает и удалится. Как я понимаю, по Вашему коду Ваш vbs всё таки определяет каталог запуска? И потом уже отрабатывает код как бы из него?? Всё сделал по Вашему, при нажатии Назначить иконку папке выскакивает Моя ошибка, простите, папку положил в C:\Program Files (x86) (у меня 64 бита) а в ошибке ясно пишет путь запуска, переложил в C:\Program Files - ВСЁ прекрасно заработало. Огромное спасибо. И можно ли как то вставить в Ваш vbs код, чтобы он брал название папки и присваивал его иконке, которая находится там же? |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Скрытый текст
Код:
Option Explicit BOBAT, и тем не менее, правильнее будет всё же привязываться к ico-файлу, а не к фону папки. C:\Program Files\Attach Icon to Folder\Attach Icon to Folder 2.vbs
Код:
Option Explicit Файл реестра для него: Код:
Windows Registry Editor Version 5.00 |
Большое спасибо!!! Всё работает, но есть один нюанс (вариант первый, привязка к папке): если изначально иконка в папке не совпадает с названием папки, то всё работает - иконка переименовывается и создаётся desktop.ini если его нет, если он есть - то перезаписывается, но если название иконки уже совпадает с названием папки, то иконка НЕ переименовывается, а выводится сообщение об ошибке
и и после нажатия на кнопку ОК desktop.ini НЕ создаётся, можно ли сделать, чтобы эта ошибка не появлялась, иконка независимо от её названия всё равно переименовывалась и desktop.ini создавался. Заранее спасибо И вот ещё что. Раньше мне приходилось заходить в папку, переименовывать значок, потом находясь в этой же папке нажимать пкм и выбирать назначить значок этой папке, теперь, когда значок переименовывается автоматически, можно ли изменить модель запуска - не заходить в папку, а прямо нажимать на папке и выбирать Назначить иконку этой папке, и vbs определит название папки, переименует иконку внутри папки и там же создаст desktop.ini и скроет оба файла? А в случае отсутствия значка в папке ничего не делать? |
И ещё прошу Вашей помощи.После все наших манипуляций с папками и файлами все файлы в папке создаются, атрибуты к файлам и папке выставлены правильно, но иконка на папке не меняется, или может поменяться через какое то время, или так и остаться стандартным видом. Но если, например, переименовать desktop.ini а потом отменить переименование, то иконка меняется сразу.Причём влияет, как я прочитал в интернете, только именно ручное переименование.
Предлагают использовать функцию shell, которая будет уведомлять обо всех запущенных обозревателях окна, чтобы использовать обновленный desktop.ini. Этот API отображается в VBScript через Shell.Application.NameSpace( "папка\" ) Код:
for /r %%I in (*.ico) do ( |
Цитата:
Замените: Код:
objFile.Name = objFSO.GetBaseName(strSourceFolder) & ".ico" Код:
If Not StrComp(objFile.Name, objFSO.GetBaseName(strSourceFolder) & ".ico", vbTextCompare) = 0 Then Цитата:
Цитата:
Цитата:
Цитата:
|
Спасибо большое!!
|
Цитата:
|
BOBAT, не «программа». Любой язык высокого уровня, работающий с WinAPI. И даже некоторые из скриптовых, например, PowerShell, AutoIt, AutoHotKey.
|
Iska, подскажите, пожалуйста, как точно называется эта команда-скрипт, наверное на Autoit или AutoHotKey смогу разобраться и сделать скрипт
|
Раньше хватало широковещательной рассылки WM\_SETTINGCHANGE message | Microsoft Docs. Но рекомендуется SHChangeNotify function | Microsoft Docs.
|
Спасибо
|
Время: 14:51. |
Время: 14:51.
© OSzone.net 2001-