|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Запуск скрипта из папки |
|
|
VBS/WSH/JS - Запуск скрипта из папки
|
Новый участник Сообщения: 38 |
Находясь в папке нажимаю пкм и запускаю скрипт (находящийся в другом месте, например в C:\Windows), как сделать так, чтобы скрипт как бы запустился из этой папки
|
|
Отправлено: 11:22, 12-08-2018 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата BOBAT:
|
|
Отправлено: 11:59, 12-08-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 38
|
Профиль | Отправить PM | Цитировать У меня есть скрипт cmd, который находясь в папке и запускаясь из неё производит определённые действия в этой папке, я хочу, чтобы находясь в любой папке я правой кнопкой из меню вызывал бы этот скрипт, и он бы отрабатывал, как бы находясь в этой папке. Сам скрипт я положил в C:\Windows, запускаю его через vbs, чтоб не мелькало консольное окно, добавил пункт в меню, который запускает этот vbs,, и он запускается и конечно запускает сам cmd, но из всех команд cmd отрабатывают только те, которые меняют атрибуты в той папке и атрибуты самой папки, той, где я нахожусь, остальные команды не отрабатывают, может есть возможность как то скопировать, что ли это cmd в папку, запустить его, он отработает, потом удалить его командой из этого же cmd
|
Последний раз редактировалось BOBAT, 12-08-2018 в 12:21. Отправлено: 12:10, 12-08-2018 | #3 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать BOBAT, Я правильно понимаю: vbs запускает cmd? Где vbs (хотелось бы на него взглянуть)? Где cmd? В vbs явно прописан путь к cmd? В самом cmd нигде нет ссылки на его путь, что-то типа
%~dp0 ? |
------- Отправлено: 14:08, 12-08-2018 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать BOBAT, тогда для начала приведите а) код пакетного файла, б) код скрипта WSH, в) опишите, как именно Вы реализовали:
Цитата BOBAT:
|
||
Отправлено: 16:57, 12-08-2018 | #5 |
Новый участник Сообщения: 38
|
Профиль | Отправить PM | Цитировать Код zapusk.vbs
Set WshShell = CreateObject("WScript.Shell") WshShell.Run "cmd.exe /c icon_hide_icon_txt.cmd", 0, false @Echo Off ChCp 1251>Nul Attrib -H "*.ico" Set fldr=%~dp0 If Exist "%~dp0desktop.ini" Attrib -H -S "%~dp0desktop.ini" For %%i In ("%~dp0*.ico") Do ( (Echo [.ShellClassInfo] Echo IconResource=%%~nxi,0 Ver | Find "6.">Nul || (Echo IconFile=%%~nxi& Echo IconIndex=0) )>"%~dp0desktop.ini" ) Attrib +H +S "%~dp0desktop.ini" Attrib +R "%fldr:~0,-1%" Attrib +H "*.ico" |
Отправлено: 20:44, 12-08-2018 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать 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 Const ReadOnly = 1 Const Hidden = 2 Const System = 4 Dim strSourceFolder Dim objFSO Dim objFile Dim strDesktopIniFile If WScript.Arguments.Count = 1 Then strSourceFolder = WScript.Arguments.Item(0) Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If objFSO.FolderExists(strSourceFolder) Then strDesktopIniFile = objFSO.BuildPath(strSourceFolder, "desktop.ini") For Each objFile In objFSO.GetFolder(strSourceFolder).Files If StrComp(objFSO.GetExtensionName(objFile.Name), "ico", vbTextCompare) = 0 Then objFile.Attributes = objFile.Attributes Or Hidden If objFSO.FileExists(strDesktopIniFile) Then With objFSO.GetFile(strDesktopIniFile) .Attributes = .Attributes And Not (System Or Hidden) End With End If With objFSO.CreateTextFile(strDesktopIniFile, True) .WriteLine "[.ShellClassInfo]" .WriteLine "IconResource=" & objFile.Name & ",0" If Left(objFSO.GetFileVersion("C:\Windows\System32\ntdll.dll"), 2) <> "6." Then .WriteLine "IconFile=" & objFile.Name .WriteLine "IconIndex=0" End If .Close End With With objFSO.GetFile(strDesktopIniFile) .Attributes = .Attributes Or (System Or Hidden) End With With objFSO.GetFolder(strSourceFolder) .Attributes = .Attributes Or ReadOnly End With Exit For End If Next Else WScript.Echo "Can't find source folder [" & strSourceFolder & "]." WScript.Quit 2 End If Set objFSO = Nothing Else WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>" WScript.Quit 1 End If WScript.Quit 0 Для внедрения в контекстное меню используем следующий файл реестра: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\Background\shell\Attach Icon to Folder] @="Назначить значок папке" "HasLUAShield"="" [HKEY_CLASSES_ROOT\Directory\Background\shell\Attach Icon to Folder\command] @=hex(2):22,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,\ 00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,77,00,\ 73,00,63,00,72,00,69,00,70,00,74,00,2e,00,65,00,78,00,65,00,22,00,20,00,22,\ 00,25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,00,6c,00,65,00,\ 73,00,25,00,5c,00,41,00,74,00,74,00,61,00,63,00,68,00,20,00,49,00,63,00,6f,\ 00,6e,00,20,00,74,00,6f,00,20,00,46,00,6f,00,6c,00,64,00,65,00,72,00,5c,00,\ 41,00,74,00,74,00,61,00,63,00,68,00,20,00,49,00,63,00,6f,00,6e,00,20,00,74,\ 00,6f,00,20,00,46,00,6f,00,6c,00,64,00,65,00,72,00,2e,00,76,00,62,00,73,00,\ 22,00,20,00,22,00,25,00,56,00,22,00,00,00 Сохраните скрипт по указанному месту, импортируйте файл реестра в реестр, пользуйте. P.S. Но идея реализации мне всё равно категорически не нравится. Я бы привязывался не к папке (HKEY_CLASSES_ROOT\Directory\Background), а к файлам *.ico — так будет и правильнее, и надёжнее, и позволит указать конкретный файл ico, если их будет несколько. |
Последний раз редактировалось Iska, 13-08-2018 в 08:36. Причина: Исправил один недостаток Отправлено: 00:17, 13-08-2018 | #7 |
Новый участник Сообщения: 38
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Понимаете, в чём дело… Скрипт у Вас находится в каталоге %SystemRoot%, пакетный файл, надо полагать, там же, рядом с ним (иначе Вы его таким кодом не запустите). Пакетный файл (из какой бы папки Вы не запускали скрипт) считает целевым каталогом тот, в котором находится сам (Set fldr=%~dp0), и всякий раз отрабатывает на том же каталоге %SystemRoot%. » Я думал, может быть, если vbs как то определит каталог запуска, то може быть он и скопирует мой cmd в этот каталог и запустит его оттуда, а cmd в этой папке отработает и удалится. Как я понимаю, по Вашему коду Ваш vbs всё таки определяет каталог запуска? И потом уже отрабатывает код как бы из него?? Всё сделал по Вашему, при нажатии Назначить иконку папке выскакивает ![]() Моя ошибка, простите, папку положил в C:\Program Files (x86) (у меня 64 бита) а в ошибке ясно пишет путь запуска, переложил в C:\Program Files - ВСЁ прекрасно заработало. Огромное спасибо. И можно ли как то вставить в Ваш vbs код, чтобы он брал название папки и присваивал его иконке, которая находится там же? |
Последний раз редактировалось BOBAT, 13-08-2018 в 07:28. Отправлено: 07:15, 13-08-2018 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата BOBAT:
Цитата BOBAT:
Цитата BOBAT:
Цитата Iska:
Цитата BOBAT:
Цитата BOBAT:
Цитата BOBAT:
Цитата BOBAT:
Цитата BOBAT:
Цитата BOBAT:
|
||||||||||
Отправлено: 07:35, 13-08-2018 | #9 |
Новый участник Сообщения: 38
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Отправлено: 08:17, 13-08-2018 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Запуск скрипта из текущей директории | lampich | Программирование и базы данных | 0 | 28-12-2012 23:56 | |
VBS/WSH/JS - запуск скрипта очистки папки в заданное время | noob88 | Скриптовые языки администрирования Windows | 3 | 03-04-2012 13:32 | |
2008 R2 - Запуск скрипта vbs из GP | teleonomic | Windows Server 2008/2008 R2 | 0 | 06-12-2011 11:32 | |
CMD/BAT - Копирование папки и запуск VBS-скрипта на удаленных машинах | Fill_Good_Inc | Скриптовые языки администрирования Windows | 3 | 16-05-2011 04:40 | |
FreeBSD - Запуск .sh скрипта из-под apache | fantik | Общий по FreeBSD | 0 | 30-06-2009 10:28 |
|