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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] аналог %~dp0 из bat для vbs (http://forum.oszone.net/showthread.php?t=312484)

NLOLegion 09-03-2016 10:09 2614110

аналог %~dp0 из bat для vbs
 
Как заменить %~dp0 в коде, чтобы скрипт работал из той папки, где был запущен, при условии, что батник в этой же папке?
Пробовал разное, искал на просторах сети, но что-то не выходит..

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "%~dp0\1.bat" & Chr(34), 0
Set WshShell = Nothing

Iska 09-03-2016 10:39 2614130

Цитата:

Цитата NLOLegion
Как заменить %~dp0 в коде, чтобы скрипт работал из той папки, где был запущен, при условии, что батник в этой же папке? »

Вообще-то, «%~dp0» вовсе не:
Цитата:

Цитата NLOLegion
из той папки, где был запущен »

а строго «из того каталога, где находится пакетный файл». Они могут совпадать, но это разные понятия.

Выглядеть сие может так:
Код:

Option Explicit

Dim objFSO


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

WScript.Echo objFSO.GetParentFolderName(WScript.ScriptFullName)

Set objFSO = Nothing

WScript.Quit 0


Petya V4sechkin 09-03-2016 10:46 2614133

Или так:
Код:

WScript.Echo Left(WScript.ScriptFullName, Len(WScript.ScriptFullName) - Len(WScript.ScriptName))

NLOLegion 09-03-2016 10:52 2614136

Iska, Petya V4sechkin, вроде как эти строчки я и нашел в сети, но где здесь запуск моего батника(1.bat)? Не получается совместить.

Petya V4sechkin 09-03-2016 11:06 2614143

Код:

Set WshShell = CreateObject("WScript.Shell")
strPath = Left(WScript.ScriptFullName, Len(WScript.ScriptFullName) - Len(WScript.ScriptName))
WshShell.Run Chr(34) & strPath & "1.bat" & Chr(34), 0


NLOLegion 09-03-2016 11:15 2614145

Petya V4sechkin, безмерно признателен!!!!

Iska 09-03-2016 11:32 2614154

Цитата:

Цитата NLOLegion
но где здесь запуск моего батника(1.bat) »

Ну, до кучи:
Код:

Option Explicit

Dim objFSO
Dim objWshShell


Set objFSO      = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell = WScript.CreateObject("WScript.Shell")

objWshShell.Run objWshShell.ExpandEnvironmentStrings("%comspec% /c """) & objFSO.BuildPath(objFSO.GetParentFolderName(WScript.ScriptFullName), "1.cmd") & """", 1, False

Set objWshShell = Nothing
Set objFSO      = Nothing

WScript.Quit 0


NLOLegion 09-03-2016 13:31 2614190

Iska, благодарю за решение! А ещё ты всегда на форуме и оперативен. Можешь ли ссылку кинуть что почитать по данному вопросу? (как вариант в личку). Не хочется быть кретином и халявщиком( а вопросы я могу задавать бесконечно)).

Iska 09-03-2016 14:01 2614197

Цитата:

Цитата NLOLegion
Можешь ли ссылку кинуть что почитать по данному вопросу? »

Полезные ресурсы по скриптовым языкам администрирования
Windows Script Host: Коллекция ссылок

Цитата:

Цитата NLOLegion
а вопросы я могу задавать бесконечно) »

Задавайте. Но помните: каждому отдельному тематическому вопросу — отдельную тему.

NLOLegion 04-01-2020 12:55 2903483

Цитата:

Цитата Iska
Ну, до кучи: »

как к этому решению добавить
Код:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\A\0\1.bat" & Chr(34), 0
Set WshShell = Nothing

?
ну конечно без надобности путь указывать - только название батника.
Чтобы и батник из каталога запустился, и дверь не скрипнула (окно консоли не появилось).
Готовое решение хорошо, но если возможно, показать какая строчка куда встанет и почему... если возможно

Iska 04-01-2020 14:28 2903489

Цитата:

Цитата NLOLegion
как к этому решению »

Там было решение задачи:
Цитата:

Цитата NLOLegion
Как заменить %~dp0 в коде, чтобы скрипт работал из той папки, где был запущен, при условии, что батник в этой же папке? »

А здесь что?

И как понять:
Цитата:

Цитата NLOLegion
WshShell.Run chr(34) & "C:\A\0\1.bat" & Chr(34), 0 »

и:
Цитата:

Цитата NLOLegion
ну конечно без надобности путь указывать - только название батника. »

?!

NLOLegion 05-01-2020 05:18 2903571

Iska, решение однозначно есть. Ваш код(пример ниже) работает!:
Код:

Option Explicit

Dim objFSO
Dim objWshShell


Set objFSO      = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell = WScript.CreateObject("WScript.Shell")

objWshShell.Run objWshShell.ExpandEnvironmentStrings("%comspec% /c """) & objFSO.BuildPath(objFSO.GetParentFolderName(WScript.ScriptFullName), "1.bat") & """", 1, False

Set objWshShell = Nothing
Set objFSO      = Nothing

WScript.Quit 0

Дополнительный вопрос появился: как запускать батник(именно тот, что в этой же папке), чтобы окно консоли не появлялось?

Просто любой батник я запускаю кодом ниже указав до батника полный путь, а хочется скрестить оба скрипта, и понять как это делается(попытаться)
Код:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\A\0\1.bat" & Chr(34), 0
Set WshShell = Nothing


Iska 05-01-2020 07:41 2903574

Цитата:

Цитата NLOLegion
как запускать батник(именно тот, что в этой же папке), чтобы окно консоли не появлялось? »

Указать вторым параметром 0 вместо 1:
Код:

objWshShell.Run objWshShell.ExpandEnvironmentStrings("%comspec% /c """) & objFSO.BuildPath(objFSO.GetParentFolderName(WScript.ScriptFullName), "1.bat") & """", 0, False
3.4. Run
VBScript - Run Method (Windows Script Host) (смотреть значения intWindowStyle в разделе Remarks)
Запуск внешних приложений из скрипта VBScript, применение объекта WshShell - AskIt.RU
.Run - VBScript - SS64.com
и т.д.

NLOLegion 05-01-2020 07:56 2903575

Iska, то что доктор прописал! Спасибо!


Время: 02:41.

Время: 02:41.
© OSzone.net 2001-