2017-06-01 26 views
1

我想創建一個腳本,將從USB複製文件到我的電腦上。它會搜索USB,並將其用作驅動器盤符。 我收到了一些第三方軟件,一旦完成,我就可以彈出USB。我認爲除了複製品外,一切都很好。我看了很多StackOverflow的帖子,但沒有人似乎有答案。複製文件錯誤 - 所需的對象:報價

錯誤是:

所需的對象:「

我的代碼:

Option Explicit 
Dim objFSO, objDrive, scriptBaseName 
Dim WshShell, strUserName, fso, x, v, y 
Set objFSO  = CreateObject("Scripting.FileSystemObject") 
scriptBaseName = objFSO.GetBaseName(Wscript.ScriptFullName) 
For Each objDrive In objFSO.Drives 
    If objDrive.DriveType = 1 And objDrive.IsReady Then 
    MsgBox objDrive.DriveLetter & ":\ = " & objDrive.VolumeName, vbInformation, scriptBaseName 
    End If 
Next 

Set WshShell = CreateObject("WScript.Shell") 
strUserName = WshShell.ExpandEnvironmentStrings("%USERNAME%") 

Set fso = CreateObject("Scripting.FileSystemObject") 

x = objDrive.DriveLetter & ":\Inspirational\Inspirational_Quotes.VBS" 
v = "C:\Users\" & strUserName & "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\" 

'Below was the problem 
fso.CopyFile x, v, True 

我嘗試這樣做:

y = "Inspirational\Inspirational_Quotes.VBS" 
WScript.Echo objDrive.DriveLetter & ":\" & y 

我不知道是什麼我要做以修復錯誤。

然後,我不得不刪除USB

'Remove the USB'(s) 
WshShell.Run "D:\Inspirational\removedrive\x64\RemoveDrive_D" 
WshShell.Run "D:\Inspirational\removedrive\x64\RemoveDrive_E" 

我這個嘗試:

fso.CopyFile """" & x & """", """" & v & """", True 

但它仍然沒有奏效。

+0

你試過逃避反斜槓嗎?你有沒有試圖給你的論點添加逃脫的引號? – reporter

+1

在'for'循環中保存'objDrive.DriveLetter'屬性到一個變量中,並在初始化'x'時使用這個變量 –

回答

1

objDrive是你的循環變量。循環結束後,它不保留一個值/對象。您需要將值或對象分配給另一個變量,以使其在循環外可訪問。

Set fso = CreateObject("Scripting.FileSystemObject") 

For Each objDrive In fso.Drives 
    If objDrive.DriveType = 1 And objDrive.IsReady Then 
    path = objDrive.RootFolder.Path 
    End If 
Next 

x = fso.BuildPath(path, "Inspirational\Inspirational_Quotes.VBS") 

行情與問題無關。 FileSystemObject方法可以使用空格處理路徑,而不需要額外的引號。

您不需要創建多個FileSystemObject對象,順便說一下。只需在腳本開始處創建一次對象。

+0

我試過了,它完美的工作!謝謝你解決我的問題! – theperfectcucumber