Скрипт, который определяет usb, когда он вставлен, и копирует файлы с usb на компьютер

Я пытаюсь написать пакетный сценарий Windows, который будет работать все время, и когда будет вставлена ​​​​флешка, он будет копировать файлы с USB на компьютер.

Я нашел много скриптов, которые делают разные его части, но ни один из них не работает так, как я хочу.

Кто-нибудь может мне помочь?


person Aram Sheroyan    schedule 18.07.2016    source источник
comment
Итак, куда вы хотели их скопировать, я имею в виду, в какую папку? Просто я хочу знать, как изменить мой скрипт, и он будет работать для вас!   -  person Hackoo    schedule 19.07.2016
comment
Спасибо за ответ. Это может быть папка с документами. Но проблема в том, что у меня нет прав администратора на этом компьютере, поэтому я хотел сделать это пакетно. Как я буду запускать ваш скрипт?   -  person Aram Sheroyan    schedule 19.07.2016


Ответы (3)


Я разместил перед vbscript здесь, чтобы сделать то, что вы хотите, просто посмотрите и попробуйте!

Vbscript для копирования файлов с определенным расширением с USB при подключении

Редактировать 19/07/2016 в 10:42 :

Я улучшил этот vbsript, чтобы он запускался от имени администратора и позволял выполнять только один экземпляр этого скрипта.

AutoSave_USB_SDCARD.vbs для копирования в папку "Мои документы"

Option Explicit
' Run as Admin
If Not WScript.Arguments.Named.Exists("elevate") Then
    CreateObject("Shell.Application").ShellExecute WScript.FullName _
    , WScript.ScriptFullName & " /elevate", "", "runas", 1
    WScript.Quit
End If
' To let executing just one insctance of this script
If AppPrevInstance() Then 
    MsgBox "There is an existing proceeding !" & VbCrLF &_
    CommandLineLike(WScript.ScriptName),VbExclamation,"There is an existing proceeding !"    
    WScript.Quit   
Else
    Do
        Call AutoSave_USB_SDCARD()
        Pause(30)
    Loop
End If
'**************************************************************************
Function AppPrevInstance()   
    With GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")   
        With .ExecQuery("SELECT * FROM Win32_Process WHERE CommandLine LIKE "_
            & CommandLineLike(WScript.ScriptFullName) & _
            " AND CommandLine LIKE '%WScript%' OR CommandLine LIKE '%cscript%'")   
            AppPrevInstance = (.Count > 1)   
        End With   
    End With   
End Function   
'**************************************************************************
Function CommandLineLike(ProcessPath)   
    ProcessPath = Replace(ProcessPath, "\", "\\")   
    CommandLineLike = "'%" & ProcessPath & "%'"   
End Function
'*************************AutoSave_USB_SDCARD()****************************
Sub AutoSave_USB_SDCARD()
    Dim Ws,WshNetwork,NomMachine,MyDoc,strComputer,objWMIService,objDisk,colDisks
    Dim fso,Drive,NumSerie,volume,cible,Amovible,Dossier,chemin,Command,Result
    Set Ws = CreateObject("WScript.Shell")
    Set WshNetwork = CreateObject("WScript.Network")
    NomMachine = WshNetwork.ComputerName
    MyDoc = Ws.SpecialFolders("Mydocuments")
    cible = MyDoc & "\"
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colDisks = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_LogicalDisk")

    For Each objDisk in colDisks
        If objDisk.DriveType = 2 Then
            Set fso = CreateObject("Scripting.FileSystemObject")
            For Each Drive In fso.Drives
                If Drive.IsReady Then
                    If Drive.DriveType = 1 Then
                        NumSerie=fso.Drives(Drive + "\").SerialNumber
                        Amovible=fso.Drives(Drive + "\")
                        Numserie=ABS(INT(Numserie))
                        volume=fso.Drives(Drive + "\").VolumeName
                        Dossier=NomMachine & "_" & volume &"_"& NumSerie
                        chemin=cible & Dossier
                        Command = "cmd /c Xcopy.exe " & Amovible &" "& chemin &" /I /D /Y /S /J /C"
                        Result = Ws.Run(Command,0,True)
                    end if
                End If   
            Next
        End If   
    Next
End Sub
'**************************End of AutoSave_USB_SDCARD()*******************
Sub Pause(Sec)
    Wscript.Sleep(Sec*1000)
End Sub 
'************************************************************************
person Hackoo    schedule 18.07.2016
comment
Нет, просто скопируйте и вставьте код и сохраните его как AutoSaveUSB.vbs Убедитесь, что расширение должно быть .vbs - person Hackoo; 19.07.2016
comment
@AramSheroyan Проверьте мое последнее редактирование, чтобы скопировать его в папку «Мои документы»! - person Hackoo; 19.07.2016
comment
это работает) но не могли бы вы удалить эти окна сообщений, которые появляются каждый раз? - person Aram Sheroyan; 19.07.2016

Это ожидает изменения томов, а затем копирует USB в c:\test. Много окон сообщений, так что вы можете видеть, что происходит. Удалите их для производства.

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 
Set evtDevice = objWMIService.ExecNotificationQuery ("SELECT * FROM Win32_VolumeChangeEvent")

Wscript.Echo "Waiting for events ..."
Do
    Set objReceivedEvent = evtDevice.NextEvent
    'report an event
    Wscript.Echo " Win32_Device Changed event occurred" & VBNewLine
    If objReceivedEvent.EventType = 1 Then 
         Wscript.Echo "Type = Config Changed" 
    ElseIf objReceivedEvent.EventType = 2 Then 
         Wscript.Echo "Type = Device Arrived" 

         Set colItems = objWMIService.ExecQuery("Select * From Win32_Volume")
         For Each objItem in colItems
               Wscript.Echo objitem.DriveType
               If objitem.DriveType = 2 then
                        Wscript.Echo objItem.DriveType & " " & objItem.Name & " " & objItem.driveletter

                        Wscript.Echo "Starting Copying"
                        Set objShell = CreateObject("Shell.Application")
                        Set Ag=Wscript.Arguments
                        set WshShell = WScript.CreateObject("WScript.Shell")

                        Set SrcFldr=objShell.NameSpace(objitem.driveletter)
                        Set DestFldr=objShell.NameSpace("c:\test\")
                        Set FldrItems=SrcFldr.Items
                        DestFldr.CopyHere FldrItems, &H214
                        Wscript.Echo "Finished Copying"


               End If
        Next


    ElseIf objReceivedEvent.EventType = 3 Then 
         Wscript.Echo "Type = Device Left" 
    ElseIf objReceivedEvent.EventType = 4 Then 
         Wscript.Echo "Type = Computer Docked" 
    End If
Loop
person Community    schedule 18.07.2016

Попробуй это:

@echo off
set backupcmd=xcopy /s /c /d /e /h /i /r /y /
%backupcmd% "%USERPROFILE%\Pictures" "%drive%\all\My pics"
%backupcmd% "%USERPROFILE%\Favorites" "%drive%\all\Favorites"
%backupcmd% "%USERPROFILE%\Videos" "%drive%\all\Vids"
%backupcmd% "%USERPROFILE%\Documents" "%drive%\all\Docs"
%backupcmd% "%USERPROFILE%\OneDrive" "%drive%\all\Onedrive"
%backupcmd% "%USERPROFILE%\Desktop" "%drive%\all\Desktop"
%backupcmd% "%USERPROFILE%\Network" "%drive%\all\Other devices"
person Mayhem Jensen    schedule 19.07.2016
comment
по какой-то причине этот код был искажен, поэтому он должен начинаться с @echo off, затем устанавливать backupcmd, затем каждая следующая строка должна начинаться с %backupcmd% и заканчиваться именем выбранного вами файла, например «Мои фото» или «Избранное». - person Mayhem Jensen; 19.07.2016
comment
Спасибо, Стефан. - person Mayhem Jensen; 19.07.2016