2016-08-16 6 views
0

現在、私が見た前のプロセスの古いスクリプトを使って作業しています。自動的にフォルダを作成し、フラッシュドライブの内容をC:ドライブにコピーします。.batスクリプトでドライブレターを動的に変更する方法

ます。xcopy「E:\ディレクトリ」「C:以下は、私はと心配スクリプトの一部である\ディレクトリ」/ S/yが

これは、私は現在、私が必要とする、今それを持っているようにスクリプトです新しいデバイスに接続するたびに最初のディレクトリエントリを変更するには、スクリプトに表示されるドライブレターが時々ローカルデバイス上のものと異なる場合があります。たとえば、UBSドライブはラップトップではD:ですが、大部分のデスクトップではE:複数の周辺機器を持つデバイスの場合は別の文字になります。 "... \ディレクトリ" "C

XCOPY:\ディレクトリ"/S/Y

.batファイルが戻ってくるので、これは機能しません

は、以前のスクリプトは次のように見えましたそのディレクトリをUBSドライブ上に置くことができません。 .batファイルを手動でハードに変更すると、すべてのディレクトリがコピーされ、後続のスクリプトはうまく動作します。

私の質問は、ダイナミックUSBドライブ文字を認識し、各デバイスのスクリプトを変更することなくコピーできるようにxcopyスクリプトを設定する方法に関するアイデアですか?

ありがとうございます!

+0

ちょっと待ってください!バッチファイルはどこに保存されていますか?それはUSBドライブに保存され、そこからダブルクリックで実行されるのですか、それともローカルのハードディスクドライブに保存されていますか?バッチファイルがUSBドライブに保存されてダブルクリックでそこから実行される場合は、バックスラッシュで始まるパスが__rootに相対的であるため、 'xcopy" \ directory "" c:\ directory "/ s/y' '%〜d0'が最初の引数のドライブ(文字+コロン)を参照しているため、現在のドライブ__か' xcopy "%〜d0 \ directory" "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ドライブをコピーします。麺

@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... 
) 
+0

いい仕事ですが、IMHOはちょっと複雑なようです。 – elzooilogico

0

SET /P USB=Enter USB Drive Letter (C:, D:, E: etc): 
XCOPY "%USB%\directory" "C:\directory" /s /y 
-1

なぜコピーが始まる前に、ドライブ文字を依頼するバッチファイルを変更していないから、前の回答にもかかわらず

関連する問題