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

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

10minutes 29-01-2015 19:33 2463371

Как подняться на 2 уровня вверх?
 
Здравствуйте!
Есть скрипт, который лежит тут:
Код:

C:\Users\user\Desktop\FOLDER01\ZOOM0001\1.vbs
Содержание скрипта:
Код:

set oShell = createobject("wscript.shell")
wscript.echo oShell.currentdirectory

Нужно, чтобы эхо выдавало:
Код:

C:\Users\user\Desktop
Оно выдает:
Код:

C:\Users\user\Desktop\FOLDER01\ZOOM0001
СurrentDirectory не менять. СurrentDirectory должен быть C:\Users\user\Desktop\FOLDER01\ZOOM0001
Если бы был CMD/BAT там есть команда на 1-ну вверх "cd ..", на 2-е вверх "cd ...". Тут это не работает....
Помогите.

Iska 29-01-2015 20:46 2463412

Цитата:

Цитата 10minutes
СurrentDirectory должен быть C:\Users\user\Desktop\FOLDER01\ZOOM0001 »

10minutes, текущий каталог для исполняющего скрипты процесса «wscript.exe»/«cscript.exe» необязательно будет совпадать с каталогом, в котором находится скрипт. На это категорически нельзя закладываться. Если уж действительно нужен каталог, в котором находится скрипт, то нужно действовать так:
Скрытый текст
Код:

Option Explicit

Dim objFSO


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

WScript.Echo objFSO.GetParentFolderName(WScript.ScriptFullName)

Set objFSO = Nothing

WScript.Quit 0


(вероятно, не сработает в случае исполнения скрипта непосредственно в памяти, например, посредством WshRemote). И никак не WshShell.CurrentDirectory.

Так что определитесь: если Вам действительно нужен текущий каталог — тогда, да, WshShell.CurrentDirectory. Если нужен каталог, в котором находится файл скрипта — тогда так, как я показал выше.

Цитата:

Цитата 10minutes
Тут это не работает.... »

Работает. Причём точно так же. Для путей внутри скрипта WSH действуют всё те же самые правила относительных путей. Т.е., подняться на два уровня вверх от пути, по которому находится скрипт можно так (если, конечно, есть куда подыматься по дереву каталогов):
Код:

WScript.Echo objFSO.BuildPath(objFSO.GetParentFolderName(WScript.ScriptFullName), "..\..")
Также дополнительно можно развернуть относительный путь в абсолютный:
Код:

WScript.Echo objFSO.GetAbsolutePathName(objFSO.BuildPath(objFSO.GetParentFolderName(WScript.ScriptFullName), "..\.."))
Последний вариант является наиболее корректным в Вашем случае.

Ещё один вариант — ссылками:
Код:

WScript.Echo objFSO.GetFile(WScript.ScriptFullName).ParentFolder.ParentFolder.ParentFolder.Path

10minutes 29-01-2015 20:50 2463417

Теперь разобрался! Iska, спасибо за помощь!


Время: 15:22.

Время: 15:22.
© OSzone.net 2001-