VBS/WSH/JS - Копирование папки с файлами из сетевой папки

Аватара пользователя
Stgean

VBS/WSH/JS - Копирование папки с файлами из сетевой папки

Сообщение Stgean »

Здравствуйте, помогите пожалуйста переписать 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

Re: VBS/WSH/JS - Копирование папки с файлами из сетевой папки

Сообщение megaloman »

Код:

Код: Выделить всё

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"
Аватара пользователя
Iska

Re: VBS/WSH/JS - Копирование папки с файлами из сетевой папки

Сообщение Iska »

Цитата:



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\
Аватара пользователя
Stgean

Re: VBS/WSH/JS - Копирование папки с файлами из сетевой папки

Сообщение Stgean »

Цитата:



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\
Аватара пользователя
Iska

Re: VBS/WSH/JS - Копирование папки с файлами из сетевой папки

Сообщение Iska »

Цитата:



А точнее? Вам в AppData\Local или в AppData\Roaming?



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

Re: VBS/WSH/JS - Копирование папки с файлами из сетевой папки

Сообщение Stgean »

Цитата:



А точнее? Вам в AppData\Local или в AppData\Roaming?



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

Re: VBS/WSH/JS - Копирование папки с файлами из сетевой папки

Сообщение Stgean »

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

Re: VBS/WSH/JS - Копирование папки с файлами из сетевой папки

Сообщение Iska »

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?





Цитата Stgean:



программа не работает, если ее с одного ярлыка запускать 2 людям
VBS/WSH/JS - Копирование папки с файлами из сетевой папки




Либо разработка времён Windows 3.1, либо разработчиков надо долго бить подсвечниками клавиатурами.
Аватара пользователя
Iska

Re: VBS/WSH/JS - Копирование папки с файлами из сетевой папки

Сообщение Iska »

Цитата Iska:



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.
VBS/WSH/JS - Копирование папки с файлами из сетевой папки




Видимо вы тоже меня не совсем понимаете))) На обычных компьютерах программа устанавливается в 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
Ответить

Вернуться в «Скриптовые языки администрирования Windows»