2016-08-16 394 views
0

我目前正在使用舊腳本來處理在執行此操作之前進行的操作,前提是自動創建文件夾並複製將閃存驅動器的內容複製到C:驅動器中。下面是我所關心的腳本的一部分:如何在.bat腳本上動態更改驅動器盤符

XCOPY「E:\目錄下的」「C:\目錄下的」/S/Y

這是劇本,因爲我有現在,我目前需要幾乎每次我插入新設備時都要更改第一個目錄條目,因爲它出現在腳本中的盤符有時與本地設備上的盤符不同。例如,UBS驅動器在筆記本電腦上是D:但在大多數臺式機上E:或者在具有多個外圍設備的情況下的其他字母。

此前腳本看起來是這樣的:

XCOPY 「... \目錄下的」 「C:\目錄下的」/ S/Y

這不充當.bat文件會回來無法在UBS驅動器上找到所述目錄。當我手動更改.bat文件以硬盤設置USB驅動器盤符時,一切正常,所有目錄都複製並且後續腳本運行良好。

我的問題,關於如何設置xcopy腳本來識別動態USB驅動器號並允許複製而不必更改每個設備上的腳本的任何想法?

謝謝!

+0

等一下!批處理文件存儲在哪裏?它是否存儲在USB驅動器中並通過雙擊執行,或者存儲在本地硬盤驅動器上?如果批處理文件存儲在USB驅動器上並通過雙擊執行,請使用'xcopy \\ directory「」c:\ directory「/ s/y',因爲以反斜槓開頭的路徑相對於__root因爲'%〜d0'引用了第一個參數 - 批處理文件的驅動器(字母加冒號),所以使用'xcopy'%〜d0 \目錄「」c:\ directory「/ s/y'。或者使用'%〜dp0' - 驅動器和以''\''結尾的批處理文件的路徑。 – Mofi

回答

1
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 
       If objitem.DriveType = 2 then 
         Wscript.Echo objItem.DriveType & " " & objItem.Name & " " & objItem.driveletter 

         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" 
         Wscript.sleep 2000 

       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 

此vbs腳本等待插入USB,然後將其複製到文件夾。

刪除所有調試wscript.echo行。更改目標文件夾。

它複製所有連接的USB驅動器。

+0

幹得好,但恕我直言,似乎有點複雜。 – elzooilogico

0

儘管麪條

@echo off 

set "destDrive=" 
for /F "usebackq tokens=1,2 delims==" %i in (`"wmic logicaldisk get caption, drivetype"`) do (
    if %%j EQU 2 set "destDrive=%%i" 
) 

if "%destDrive%" EQU "" (
    echo No pendrive found 
) else (
    echo copying 
    xcopy "%destDrive%\directory\*.*" "c:\directory\*.*" /s /y 
    echo done... 
) 
-1

爲什麼不修改批處理文件來索要副本開始之前的驅動器盤符以前的答案?

SET /P USB=Enter USB Drive Letter (C:, D:, E: etc): 
XCOPY "%USB%\directory" "C:\directory" /s /y 
相關問題