Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Запуск скрипта из папки

Ответить
Настройки темы
VBS/WSH/JS - Запуск скрипта из папки

Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


Находясь в папке нажимаю пкм и запускаю скрипт (находящийся в другом месте, например в C:\Windows), как сделать так, чтобы скрипт как бы запустился из этой папки

Отправлено: 11:22, 12-08-2018

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата BOBAT:
Находясь в папке нажимаю пкм и запускаю скрипт »
Это то, что у Вас уже есть, или это то, что Вам бы хотелось получить, но не знаете — как?

Отправлено: 11:59, 12-08-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


У меня есть скрипт cmd, который находясь в папке и запускаясь из неё производит определённые действия в этой папке, я хочу, чтобы находясь в любой папке я правой кнопкой из меню вызывал бы этот скрипт, и он бы отрабатывал, как бы находясь в этой папке. Сам скрипт я положил в C:\Windows, запускаю его через vbs, чтоб не мелькало консольное окно, добавил пункт в меню, который запускает этот vbs,, и он запускается и конечно запускает сам cmd, но из всех команд cmd отрабатывают только те, которые меняют атрибуты в той папке и атрибуты самой папки, той, где я нахожусь, остальные команды не отрабатывают, может есть возможность как то скопировать, что ли это cmd в папку, запустить его, он отработает, потом удалить его командой из этого же cmd

Последний раз редактировалось BOBAT, 12-08-2018 в 12:21.


Отправлено: 12:10, 12-08-2018 | #3


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


BOBAT, Я правильно понимаю: vbs запускает cmd? Где vbs (хотелось бы на него взглянуть)? Где cmd? В vbs явно прописан путь к cmd? В самом cmd нигде нет ссылки на его путь, что-то типа
%~dp0 ?

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 14:08, 12-08-2018 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


BOBAT, тогда для начала приведите а) код пакетного файла, б) код скрипта WSH, в) опишите, как именно Вы реализовали:
Цитата BOBAT:
добавил пункт в меню, который запускает этот vbs, »
От этого и будем дальше танцевать.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:57, 12-08-2018 | #5


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


Код zapusk.vbs
Код: Выделить весь код
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "cmd.exe /c icon_hide_icon_txt.cmd", 0, false
Код hide_icon_txt.cmd
Код: Выделить весь код
@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"
Добавил пункт в меню через реестр
Код: Выделить весь код
[HKEY_CLASSES_ROOT\Directory\Background\shell\HHFF]
@="Изменить иконку папки"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\Background\shell\HHFF\command]
@="WScript C:\\Windows\\zapusk.vbs"

Отправлено: 20:44, 12-08-2018 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить 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
здесь значение параметра по умолчанию раздела command — «"%SystemRoot%\System32\wscript.exe" "%ProgramFiles%\Attach Icon to Folder\Attach Icon to Folder.vbs" "%V"» с типом REG_EXPAND_SZ (вместо типичного REG_SZ).

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

P.S. Но идея реализации мне всё равно категорически не нравится. Я бы привязывался не к папке (HKEY_CLASSES_ROOT\Directory\Background), а к файлам *.ico — так будет и правильнее, и надёжнее, и позволит указать конкретный файл ico, если их будет несколько.

Последний раз редактировалось Iska, 13-08-2018 в 08:36. Причина: Исправил один недостаток

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:17, 13-08-2018 | #7


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить 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
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата BOBAT:
Я думал, может быть, если vbs как то определит каталог запуска, »
Чтобы он «как-то определил» — этим нужно предварительно озаботиться.

Цитата BOBAT:
то може быть он и скопирует мой cmd в этот каталог и запустит его оттуда, а cmd в этой папке отработает и удалится. »
Зачем всё вот это — скопирует, запустит, отработает, удалится? Ничего этого уже не нужно.

Цитата BOBAT:
Как я понимаю, по Вашему коду Ваш vbs всё таки определяет каталог запуска? »
Да. Путь передаётся ему посредством параметра:
Цитата Iska:
здесь значение параметра по умолчанию раздела command — «"%SystemRoot%\System32\wscript.exe" "%ProgramFiles%\Attach Icon to Folder\Attach Icon to Folder.vbs" "%V"» с типом REG_EXPAND_SZ (вместо типичного REG_SZ). »
Цитата BOBAT:
Всё сделал по Вашему, при нажатии Назначить иконку папке выскакивает »
Покажите скриншот каталога C:\Program Files\Attach Icon to Folder с находящемся в нём скриптом Attach Icon to Folder.vbs. Хочу увидеть.

Цитата BOBAT:
От cmd конечно нужно отказываться, есть ли способ переконвертировать мой cmd в vbs, »
Не нужно переконвертировать. Уже не нужно. Пакетный файл больше не нужен. Совсем.

Цитата BOBAT:
иконок в папке не может быть больше одной, »
Тем не менее, код Вашего пакетного файла перебирает их все, сколько бы ни было, и назначает самую последнюю. Мой код — самую первую. Но как я писал, мне не нравится сам подход.

Цитата BOBAT:
также мой cmd не выводит никаких сообщений в случае отсутствия каких либо иконок в папке, »
Мой код — тоже. Он ничего в этом случае не делает. Ваш — независимо от наличия иконок в любом случае назначает каталогу атрибут «Только для чтения».

Цитата BOBAT:
хотелось бы ещё код вставить в cmd чтобы он, »
Забудьте уже про пакетный файл.

Цитата BOBAT:
и переименовывал иконку, которая лежит в этой папке на полученное (то есть название папки и название иконки совпадают), »
Э… Можно, но… зачем?!
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:35, 13-08-2018 | #9


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Э… Можно, но… зачем?! »
Для эстетики... Ваш код и файл всё прекрасно отрабатывет. Большое спасибо!!!

Отправлено: 08:17, 13-08-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Запуск скрипта из папки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Запуск скрипта из текущей директории 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




 
Переход