Я пытаюсь разработать простой скрипт, который копирует файлы на определенные диски.VBScript XCopy на локальный диск не работает
скрипт выполняет следующие действия:
- Проверки на физический диск с буквой
- Если диск существует копирование файлов.
- Если нет привода двигаться к шагу 2.
- Проверить сетевой диск с буквой
- Если диск существует копирование файлов.
- Если нет привода двигаться к шагу 3.
- Создать новое отображение сети
- Копирование файлов на диск
Когда сетевой диск существует, или сеть отображается диск созданный с помощью скрипта, команды XCopy работают отлично. Проблема заключается в шаге 1, и локальный диск уже существует, никакие файлы не копируются на диск после вызова XCopy.
Вот мой код:
strLocalDrive = "E:"
strRemoteShare = "\\127.0.0.1\c$\Program Files (x86)\MyFolder\EDrive"
bolFoundExisting = False
source = "C:\Program Files (x86)\MyFolder\EDrive\*"
destination = "E:\"
' Check parameters passed make sense
If Right(strLocalDrive, 1) <> ":" OR Left(strRemoteShare, 2) <> "\\" Then
'wscript.echo "Usage: cscript MapDrive.vbs drive fileshare //NoLogo"
WScript.Quit(1)
End If
'wscript.echo " - Mapping: " + strLocalDrive + " to " + strRemoteShare
'Set objNetwork = WScript.CreateObject("WScript.Network")
Set objNetwork = CreateObject("WScript.Network")
Set oShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
' Loop through the network drive connections and disconnect any that match strLocalDrive
Set objDrives = objNetwork.EnumNetworkDrives
' first check that physical drive does not exist
If objFSO.DriveExists(strLocalDrive) Then
WScript.echo "Physical Drive Found"
bolFoundExisting = True
ElseIf objDrives.Count > 0 Then
For i = 0 To objDrives.Count-1 Step 2
If objDrives.Item(i) = strLocalDrive Then
strShareConnected = objDrives.Item(i+1)
'objNetwork.RemoveNetworkDrive strLocalDrive, True, True
i=objDrives.Count-1
bolFoundExisting = True
End If
Next
End If
If bolFoundExisting <> True Then
WScript.echo "Drive DOES NOT exists"
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
objReg.GetStringValue HKCU, "Network\" & Left(strLocalDrive, 1), "RemotePath", strShareConnected
If strShareConnected <> "" Then
Set objReg = Nothing
bolFoundRemembered = True
End If
'Now actually do the drive map (not persistent)
Err.Clear
On Error Resume Next
objNetwork.MapNetworkDrive strLocalDrive, strRemoteShare, False
Else
' Drive exists copy files
WScript.echo "Drive exists"
oShell.Run "xcopy.exe " & source & " " & destination & " /C /D /E /H /I /K /R /S /Y"
Set oShell = Nothing
End IF
Я был бы очень признателен, если кто-нибудь может объяснить, почему команду XCOPY копирует только файлы на сетевые диски, а не на локальные диски! ТИА!
UPDATE Я понял, что проблема вызвана пробелами в имени пути. Странно, что копирование на сетевые диски работает, но не на физические диски. Как я могу обрабатывать пробелы в имени пути?
Какова точная команда, которую вы бежите в вашем 'oShell. Выполнить? Он работает из командной строки? – Bond
Поместите путь с пробелами в кавычки? – eurotrash
@eurotrash Я не могу поместить их в кавычки, поскольку я определяю их в переменной вроде этого: source = "C: \ Program Files (x86) \ MyFolder \ EDrive \ *", а затем использовать ее так: oShell.Run "xcopy. exe "& source &" "& destination &"/C/D/E/H/I/K/R/S/Y " –