![]() |
+VBS: копирование файлов с сервера в папку установки проги
Такая ситуация: в автокад были добавлены некоторые шаблоны (то есть файлы .dwg), которые содержали официальное короткое название нашей организации, сейчас пришло указание сменить официальное короткое название организации и во всех шаблонах в автокаде соответственно поменять это название. Все автокады (2004, 2007, 2008) ставятся с серверов, там есть их развертки. В развертках я все поменяла, теперь получается, что у всех пользователей, у кого автокады были поставлены раньше (это окоо 150 пользователей), старые шаблоны, то есть необходимо их подменить на новые с новым названием, можно конечно ручками ходить по кабинетам и копировать новые файлы с шаблонами, но это долго и нехорошо. Поэтому надо написать такой скрипт, который будет копировать эти файлы с сервера туда, где лежат такие же (только старые) у пользователя на компе. Проблема еще в том, что системные пути разные, то есть у кого-то это Programs, у кого-то Program Files, так же у кого-то Documents, у кого-то Documents and Settings. У меня опыт написания скриптов почти нулевой, но на сколько я знаю, cmd файлы не работают с unc путями, а как задавать системные папки в vbs я никак не могу найти, и как вообще получить путь, где стоит автокад и соответственно лежат шаблоны?
|
Только что где-то прочитала, что cmd работают с unc путями, подскажите, как это реализовать.
|
Set fileFSO = CreateObject("Scripting.FileSystemObject")
source_file = "\\Apu18s\Shell\civil3D_2007_net\acad2000.lsp" dest_file = "%ProgramFiles%\\Autodesk Civil 3D 2007\\Graph\\acad.lsp" fileFSO.CopyFile source_file, dest_file , true Примерно таким должен быть файл, но не работает dest_file, как исправить? |
Цитата:
Код:
Copy /Y "\\Apu18s\Shell\civil3D_2007_net\acad2000.lsp" "%ProgramFiles%\Autodesk Civil 3D 2007\Graph\acad.lsp" |
Спасибо за ответ, но не получилось....вобщем так: у меня автокад 2007 стоит в Program Files, а сист перем %Program Files% = Programs.... то есть надо узнать в этом скрипте, где стоит автокад.....сорри, я наверно, не очень правильно объяснила первый раз..
и даже если явно задать Program Files, то все равно не копируется ((((( |
la_vanille_ciel, тогда придется брать из реестра.
Выясните, в каком параметре и разделе прописан путь. Например у 2006-го (русского) это AcadLocation в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R16.2\ACAD-4001:419 А у 2007-го? |
у 2007 это будет так же, только R 17.0 ...
я нашла скрипт чтения этого пути в реестре, но есть две проблемы с ним: 1) он не совсем рабочий: Const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ strComputer & "\root\default:StdRegProv") strKeyPath = "Software\Autodesk" objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys For Each subkey In arrSubKeys If subkey = "AutoCAD" Then find = True Path_reg = strKeyPath & "\" & subkey Exit For End If Next If Not find Then For Each subkey In arrSubKeys If subkey = "Adobe Acrobat" Then find = True Path_reg = strKeyPath & "\" & subkey Exit For End If Next End If If Not find Then execute_programm_path = "" Exit Function Else objReg.EnumKey HKEY_LOCAL_MACHINE, Path_reg, arrSubKeys For Each subkey In arrSubKeys Version_Acr = subkey Next End If objReg.GetStringValue HKEY_LOCAL_MACHINE, Path_reg & "\" & Version_Acr & "\InstallPath\", "", dwValue execute_programm_path = dwValue (ругается на exit и еще что-то...) 2) как потом его положить в скрипт, в котором написано копирование: Set fileFSO = CreateObject("Scripting.FileSystemObject") source_file = "\\Apu18s\Shell\civil3D_2007_net\acad2004.lsp" dest_file = "C:\Program Files\Autodesk Civil 3D 2007\Graph\acad.lsp" fileFSO.CopyFile source_file, dest_file , true (примерный скрипт копирования vbs, только dest_file не работает). аа...наврала, будет: HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R 17.0\ACAD-5000:419 |
Цитата:
|
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R 17.0\ACAD-5000:419 - такое у 2007
|
AcadLocation = C\ProgramFiles\Autodesk Civil 3D 2007
|
la_vanille_ciel, примерно так (у меня работает, во всяком случае):
Код:
On Error Resume Next |
((((((((((((((((((((((((((( не работает, может у меня с компом что-то не так......
я убрала строчку, которая не повзволяет ошибке выводиться (если я правильно поняла):On Error Resume Next и тогда он сообщает: ошибка: строка 8 символ 1, неверная ссылка на корень в разделе реестра, источник WshShell.RegRead ... |
la_vanille_ciel, значит, раздел реестра HKLM\SOFTWARE\Autodesk\AutoCAD\R 17.0\ACAD-5000:419 не существует.
|
как это???? я же его своими глазами вижу!!!!
я даже поменяла на HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R 17.0\ACAD-5000:419 чтобы точно уж....а оно не работает...что делать????? |
la_vanille_ciel, уверены, что в \R 17.0\ пробел?
|
для всех остальных автокадов тоже не работает (((((((((((((((( такого не может быть...они же все у меня стоят!!
да, я уже и без пробела попробовала...то же самое (((( |
пожалуйста...не бросайте меня ((((((((((((
АААААААААААААААААААААААА Сработало!!!!!! Но только для 2008, который стоит в Programs, для 2004 и 2007 не работает, разница - они стоят в Program Files.....почему так? |
УРА!!!!!!!!!!!!!!!!!!!!!!! ОНИ ВСЕ РАБОТАЮТ!!!!!! Я просто перепечатала эти строки для реестра ручками и убрала пробел везде после R.
Petya V4sechkin - Вы супер!!!! СПАСИБО Вам большое!!!!!! |
Цитата:
Рад, что смог помочь. |
теперь оказывается, надо еще этот скрипт в автозагрузку сделать.... :(
млин, я вообще в Vbs никак, хоть он и для начинающих... :( |
Цитата:
У вас в организации сеть с доменом? |
а еще как проверить, существует такая ветка или нет, а то надо один скрипт только.....
|
Цитата:
Первая строчка On Error Resume Next означает, что мы берем на себя контроль ошибок. Дальше: Код:
P = "" Таким образом, для разных версий автокада достаточно размножить эти фрагменты: Код:
P = "" |
Да, я так и сделала! То есть один файл vbs, в котором эти строки размножены для всех автокадов...НО проблема в том, что там все автокады собраны, а у пользователя может стоит два из них или три, например, 4й и 7й...и когда скрипт доходит до ветки реестра, например, 5го автокада, он пишет, что не найден путь (ну его же нет на самом деле) и все ...типа ошибка, а дальше не пойму, он же после ошибки дальше не будет выполняться, так? Вот типа надо проверять наличие ветки до ее чтения.... :dont-know :help:
Я написала RegExists :biggrin: и оно конечно не работает, потому что не знаю какой метод надо... :( |
Цитата:
Цитата:
После On Error Resume Next никаких сообщений об ошибках не будет, при ошибке выполнение скрипта продолжится со следующей команды. |
Я понимаю, но у меня не принимают, требует, чтобы не было этой строки и чтобы перед чтением проверялось, есть ли такая ветка.... :cry:
а если настаивать на On Error Resume Next, то вот например, дошел скрипт до 4го автокада, ветка есть, у пользователя стоит, далее идет до пятого, такого у него нет, ошибки не выдастся, но пойдет он дальше до 6го 7го 8го?? А еще можно спросить, P="" это для обнуления какого-то? |
Уже вроде принимают и так, но теперь надо вывести значение PP1 в сообщение (эхо что ли.. :dont-know ) в коде:
On Error Resume Next Dim WSh, FSO, P, P1, P2, P3, P4 Set WSh = WScript.CreateObject("WScript.Shell") Set FSO = WScript.CreateObject("Scripting.FileSystemObject") P = WSh.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R16.0\ACAD-201:419\AcadLocation") PP = P & "\Graph\Support" If FSO.FolderExists(PP) Then FSO.CopyFolder "\\Uzdp-files\share_shell\New_Stamps_CAD\NewShortName2004", PP, True P1 = WSh.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R16.1\ACAD-301:419") PP1 = P1 & "\Graph\Support" If FSO.FolderExists(PP1) Then FSO.CopyFolder "\\Uzdp-files\share_shell\New_Stamps_CAD\NewShortName", PP1, True P2 = WSh.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R16.2\ACAD-4001:419") PP2 = P2 & "\Graph\Support" If FSO.FolderExists(PP2) Then FSO.CopyFolder "\\Uzdp-files\share_shell\New_Stamps_CAD\NewShortName", PP2, True P3 = WSh.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.0\ACAD-5000:419\AcadLocation") PP3 = P3 & "\Graph\Support" If FSO.FolderExists(PP3) Then FSO.CopyFolder "\\Uzdp-files\share_shell\New_Stamps_CAD\NewShortName", PP3, True P4 = WSh.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.1\ACAD-6000:419\AcadLocation") PP4 = P4 & "\Graph\Support" If FSO.FolderExists(PP4) Then FSO.CopyFolder "\\Uzdp-files\share_shell\New_Stamps_CAD\NewShortName", PP4, True :help: |
:) Все отлично, все работает =)
|
Время: 16:29. |
Время: 16:29.
© OSzone.net 2001-