windows linux子系统-插入usb时检测usb并将文件从usb复制到计算机的脚本



我正在尝试编写一个windows批处理脚本,该脚本将一直运行,当插入usb闪存驱动器时,它将把文件从usb复制到计算机。

我发现很多剧本都有不同的部分,但没有一个能达到我想要的效果。

森博迪能帮我吗?

我在这里发布了一个vbscript,可以做你想做的事情,看看并尝试一下!

插入时从usb复制具有特定扩展名的文件的Vbscript

编辑时间:2016年7月19日10:42:

我改进了这个vbsrpt以管理员身份运行,并允许只执行这个脚本的一个部分。

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}!\.rootcimv2")   
        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 & "rootcimv2")
    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 
'************************************************************************

这将等待卷更改,然后将USB复制到c:\test。有很多信息框,所以你可以看到发生了什么。移除它们以进行生产。

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\.rootCIMV2") 
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

试试这个:

@echo off
set backupcmd=xcopy /s /c /d /e /h /i /r /y /
%backupcmd% "%USERPROFILE%Pictures" "%drive%allMy pics"
%backupcmd% "%USERPROFILE%Favorites" "%drive%allFavorites"
%backupcmd% "%USERPROFILE%Videos" "%drive%allVids"
%backupcmd% "%USERPROFILE%Documents" "%drive%allDocs"
%backupcmd% "%USERPROFILE%OneDrive" "%drive%allOnedrive"
%backupcmd% "%USERPROFILE%Desktop" "%drive%allDesktop"
%backupcmd% "%USERPROFILE%Network" "%drive%allOther devices"

最新更新