Войти

Показать полную графическую версию : Копирование папки с файлами из сетевой папки


Stgean
19-04-2019, 14:44
Здравствуйте, помогите пожалуйста переписать 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"

Stgean
22-04-2019, 11:31
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 вставлена для отладки, если Вас устроит результат, можете её убить

Iska
22-04-2019, 16:39
C:\Users\Usersprofile\AppData »
А точнее? Вам в AppData\Local или в AppData\Roaming?

Stgean
23-04-2019, 06:16
А точнее? Вам в AppData\Local или в AppData\Roaming?

Папка с программой у пользователей лежит в C:\Users\userprofile\AppData\1

Iska
23-04-2019, 07:27
Stgean, не должно такого быть. Это какой-то ручной самопал получается. Где, скажем, будет находиться каталог с программой в случае до-Vista ОС?

Stgean
23-04-2019, 07:36
Stgean, не должно такого быть. Это какой-то ручной самопал получается. Где, скажем, будет находиться каталог с программой в случае до-Vista ОС?
По другому и не получится, программа не работает, если ее с одного ярлыка запускать 2 людям. Поэтому, я и принял решение что на сервере хранится эталон на C:\1, у каждого пользователя она лежит в C:\Users\userprofile\AppData\1, много места занимает конечно, но зато у каждого пользователя своя программа. Поэтому мне и необходимо ее обновить, но не знаю как правильно путь указывается на vbs именно до C:\Users\userprofile\AppData\1.

Iska
23-04-2019, 23:34
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
24-04-2019, 06:03
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

Iska
24-04-2019, 17:05
Видимо вы тоже меня не совсем понимаете))) »
Я Вас понял. А вот Вы меня по-прежнему — нет.

положить … в 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