Показать полную графическую версию : Копирование папки с файлами из сетевой папки
Здравствуйте, помогите пожалуйста переписать bat файл в vbs
Сам код bat
@echo off
Set From="\\192.168.0.21\1$\2"
Set To="C:\3"
Set VerFile="C:\3\11.txt"
If Not Exist %VerFile% If Exist %To% xcopy %From% %To% /s /e /c /h /r /y /q
megaloman
19-04-2019, 15:53
BoxIn = "\\192.168.100.23\Test1\kuku"
BoxOut = "Z:\Soft_Out"
Flag = BoxOut + "\11.txt"
With CreateObject("Scripting.FileSystemObject")
If Not .FolderExists(BoxOut) Then
MsgBox "Folder" + vbCrLf + vbCrLf + BoxOut + vbCrLf + vbCrLf + "not found"
WScript.Quit 2
End If
If .FileExists(Flag) Then
MsgBox "File" + vbCrLf + vbCrLf + Flag + vbCrLf + vbCrLf + "exists."
WScript.Quit 1
End If
.CopyFolder BoxIn, BoxOut, True
End With
MsgBox "OK"
BoxIn = "\\192.168.100.23\Test1\kuku"
BoxOut = "Z:\Soft_Out"
Flag = BoxOut + "\11.txt"
With CreateObject("Scripting.FileSystemObject")
If Not .FolderExists(BoxOut) Then
MsgBox "Folder" + vbCrLf + vbCrLf + BoxOut + vbCrLf + vbCrLf + "not found"
WScript.Quit 2
End If
If .FileExists(Flag) Then
MsgBox "File" + vbCrLf + vbCrLf + Flag + vbCrLf + vbCrLf + "exists."
WScript.Quit 1
End If
.CopyFolder BoxIn, BoxOut, True
End With
MsgBox "OK"
А как можно написать путь чтобы все копировалось в C:\Users\Usersprofile\AppData. Это нужно чтобы можно было обновлять программу на терминальных серверах.
Вот так можно написать путь в BoxOut?
C:\Users" & username & "\AppData\
megaloman
22-04-2019, 15:08
Stgean, Попробуйте BoxOut = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%UserProfile%") + "\AppData"
MsgBox BoxOut Строка MsgBox BoxOut вставлена для отладки, если Вас устроит результат, можете её убить
C:\Users\Usersprofile\AppData »
А точнее? Вам в AppData\Local или в AppData\Roaming?
А точнее? Вам в AppData\Local или в AppData\Roaming?
Папка с программой у пользователей лежит в C:\Users\userprofile\AppData\1
Stgean, не должно такого быть. Это какой-то ручной самопал получается. Где, скажем, будет находиться каталог с программой в случае до-Vista ОС?
Stgean, не должно такого быть. Это какой-то ручной самопал получается. Где, скажем, будет находиться каталог с программой в случае до-Vista ОС?
По другому и не получится, программа не работает, если ее с одного ярлыка запускать 2 людям. Поэтому, я и принял решение что на сервере хранится эталон на C:\1, у каждого пользователя она лежит в C:\Users\userprofile\AppData\1, много места занимает конечно, но зато у каждого пользователя своя программа. Поэтому мне и необходимо ее обновить, но не знаю как правильно путь указывается на vbs именно до C:\Users\userprofile\AppData\1.
Stgean, Вы меня не поняли. Приложения, устанавливаемые в режиме «на пользователя», должны хранить свои постоянные и временные данные (в том числе и исполняемые файлы) не в корне %UserProfile%/AppData, а на уровень ниже. У нас есть каталог %UserProfile%\AppData, в котором находятся каталоги:
Roaming (бывший каталог Application Data из предыдущих версий ОС, нынче в профиле вместо данного каталога имеется связь (junction) Application Data, указывающая на каталог %UserProfile%\AppData\Roaming), переменная окружения, указывающая на данный каталог — %APPDATA%;
Local (бывший каталог Local Settings из предыдущих версий ОС, нынче в профиле вместо данного каталога имеется связь (junction) Local Settings, указывающая на каталог %UserProfile%\AppData\Local), переменная окружения, указывающая на данный каталог — %LOCALAPPDATA%;
LocalLow — нововведение новых версий ОС, что это такое и для чего нужно — можно почитать по ссылке ниже, нас он в данном случае не интересует.
Исполняемые файлы приложений, устанавливаемых в режиме «на пользователя», как правило, хранятся либо в каталоге %UserProfile%\AppData\Roaming (и перемещаются вместе с профилем пользователя по машинам [в случае использования перемещаемого доменного профиля]), либо в каталоге %UserProfile%\AppData\Local (и не «гуляют» вослед пользователю вместе с его профилем по машинам) в виде %UserProfile%\AppData\Roaming|Local\Название компании\Название приложения. Но никак не в корне каталога %UserProfile%\AppData.
Зачем нужна и где расположена папка AppData в Windows? (https://hetmanrecovery.com/ru/recovery_news/why-do-i-need-and-where-is-the-appdata-folder-in-windows.htm)
программа не работает, если ее с одного ярлыка запускать 2 людям »
Либо разработка времён Windows 3.1, либо разработчиков надо долго бить подсвечниками клавиатурами.
Stgean, Вы меня не поняли. Приложения, устанавливаемые в режиме «на пользователя», должны хранить свои постоянные и временные данные (в том числе и исполняемые файлы) не в корне %UserProfile%/AppData, а на уровень ниже. У нас есть каталог %UserProfile%\AppData, в котором находятся каталоги:
Roaming (бывший каталог Application Data из предыдущих версий ОС, нынче в профиле вместо данного каталога имеется связь (junction) Application Data, указывающая на каталог %UserProfile%\AppData\Roaming), переменная окружения, указывающая на данный каталог — %APPDATA%;
Local (бывший каталог Local Settings из предыдущих версий ОС, нынче в профиле вместо данного каталога имеется связь (junction) Local Settings, указывающая на каталог %UserProfile%\AppData\Local), переменная окружения, указывающая на данный каталог — %LOCALAPPDATA%;
LocalLow — нововведение новых версий ОС, что это такое и для чего нужно — можно почитать по ссылке ниже, нас он в данном случае не интересует.
Исполняемые файлы приложений, устанавливаемых в режиме «на пользователя», как правило, хранятся либо в каталоге %UserProfile%\AppData\Roaming (и перемещаются вместе с профилем пользователя по машинам [в случае использования перемещаемого доменного профиля]), либо в каталоге %UserProfile%\AppData\Local (и не «гуляют» вослед пользователю вместе с его профилем по машинам) в виде %UserProfile%\AppData\Roaming|Local\Название компании\Название приложения. Но никак не в корне каталога %UserProfile%\AppData. »
Видимо вы тоже меня не совсем понимаете))) На обычных компьютерах программа устанавливается в C:\1, тут проблем никаких не возникает, а вот на терминальном сервере уже немного посложнее. Хоть она и ставиться в C:\1, то запускать ее несколько пользователей с одного ярлыка не могут, программа выдает ошибку что файл lock уже якобы занят. Поэтому и пришла мысль положить каждому пользователю кто работает с этой программой в UserProfile\AppData\1. Место конечно немало занимается, но другого решения этой проблемы я не нашел.
В итоге объединил весь код с которым мне помогли и на удивление все работает.
BoxIn = "\\192.168.0.21\32$\2"
BoxOut1 = "C:\1"
BoxOutTerm = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%UserProfile%") + "\AppData" + "\1"
Flag1 = BoxOut1 + "\23.txt"
FlagTerm = BoxOutTerm + "\23.txt"
'*************************************************
With CreateObject("Scripting.FileSystemObject")
If Not .FolderExists(BoxOut1) Then
WScript.Quit 2
End If
If Not .FolderExists(BoxOutTerm) Then
WScript.Quit 2
End If
If .FileExists(Flag1) Then
End If
.CopyFolder BoxIn, BoxOut1, True
If .FileExists(FlagTerm) Then
End If
.CopyFolder BoxIn, BoxOutTerm, True
End With
Видимо вы тоже меня не совсем понимаете))) »
Я Вас понял. А вот Вы меня по-прежнему — нет.
положить … в UserProfile\AppData\1. »
Кладите не в %UserProfile%\AppData\1, а в %UserProfile%\AppData\Local\1. Для определения пути к каталогу …\Local используйте либо раскрытие переменной окружения %LOCALAPPDATA%, либо (что более правильно) предопределённое символьное имя Проводника «shell:Local AppData»: WSH: перечень предопределённых символьных имён Shell.Application — Коллекция скриптов и идей — Серый форум (http://forum.script-coding.com/viewtopic.php?id=3768).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.