2017-08-15 418 views
1

我正在進行一些Arduino HID研究。 我試圖設置我的Leo打開PowerShell,並通過卷名將我的Documents文件夾中的所有.pdf備份到閃存驅動器。RoboCopy在通用文件路徑中給出錯誤

我希望這可以移植到不同的機器上。因此,不能使用包含用戶名的指定文件路徑。

我發現的原始腳本就是這個。

param([parameter(mandatory=$true)]$VolumeName, 
     [parameter(mandatory=$true)]$SrcDir) 

# find connected backup drive: 
$backupDrive = $null 
get-wmiobject win32_logicaldisk | % { 
    if ($_.VolumeName -eq $VolumeName) { 
     $backupDrive = $_.DeviceID 
    } 
} 
if ($backupDrive -eq $null) { 
    throw "$VolumeName drive not found!" 
} 

# mirror 
$backupPath = $backupDrive + "\" 
& robocopy.exe $SrcDir $backupPath /MIR /Z 

我遇到的問題是,當我通過C:\users\$env:username\Documents\ Powershell的路徑引發錯誤說明。

"ERROR 123 (0x0000007B) Accessing Source Directory C:\Users\$env:USERNAME\Documents\ 
The filename, directory name, or volume label syntax is incorrect." 

接下來,我試圖消除$ SRCDIR參數,並與新的腳本看起來像這樣指定一個變量的路徑:

param([parameter(mandatory=$true)]$VolumeName) 
$backupDrive = $null 
get-wmiobject win32_logicaldisk | % { 
    if ($_.VolumeName -eq $VolumeName) { 
     $backupDrive = $_.DeviceID 
    } 
} 
$backupPath = $backupDrive + "\" 

[email protected]($env:username + "\Documents\") 
[email protected]($backupPath) 

robocopy $source $destination *.pdf /mir /z 

這也失敗給我的另一條路徑誤差顯然ROBOCOPY是輸入我的用戶名兩次看到這裏:

------------------------------------------------------------------------------- 
    ROBOCOPY  ::  Robust File Copy for Windows 
------------------------------------------------------------------------------- 

    Started : Tuesday, August 15, 2017 3:49:04 AM 
    Source : C:\Users\me\me\Documents\ 
    Dest = F:\ 

    Files : *.pdf 

    Options : /S /E /DCOPY:DA /COPY:DAT /PURGE /MIR /Z /R:1000000 /W:30 

------------------------------------------------------------------------------ 

2017/08/15 03:49:04 ERROR 3 (0x00000003) Accessing Source Directory C:\Users\damav\damav\Documents\ 
The system cannot find the path specified. 

所以我編輯了最後一行,包括直接路徑和無變化。

robocopy C:\Users\$env:username\Documents\ $backupDrive *.pdf /mir /z 

輸出給那讓我困惑多的問題,剩下的一個不同的結果。看一看:

------------------------------------------------------------------------------- 
    ROBOCOPY  ::  Robust File Copy for Windows 
------------------------------------------------------------------------------- 

    Started : Tuesday, August 15, 2017 3:55:36 AM 
    Source : C:\Users\me\Documents\ 
    Dest = F:\ 

    Files : *.pdf 

    Options : /S /E /DCOPY:DA /COPY:DAT /PURGE /MIR /Z /R:1000000 /W:30 

------------------------------------------------------------------------------ 

          0 C:\Users\me\Documents\ 
          0 C:\Users\me\Documents\My Music\ 
      New Dir   0 C:\Users\me\Documents\My Pictures\ 
2017/08/15 03:55:36 ERROR 5 (0x00000005) Time-Stamping Destination Directory F:\My Pictures\ 
Access is denied. 
Waiting 30 seconds... Retrying... 
2017/08/15 03:56:07 ERROR 5 (0x00000005) Time-Stamping Destination Directory F:\My Pictures\ 
Access is denied. 
Waiting 30 seconds... 

之所以說它是如此混亂是因爲我的文檔文件夾中的NOR閃存驅動器中不存在這些目錄,ROBOCOPY試圖複製。 C:\用戶\我\文檔\

C:\用戶\我\ Documents \我的音樂\ C:\用戶\我\ Documents \我的圖片\ F:\我的圖片\

所以我完全陷入困境,來到這裏向專業人士尋求幫助。 我也試過%USERNAME%%USERPROFILE%在文件路徑中使用我上面說過的相同的腳本變體,但是由於robocopy假設它們是實際路徑名稱的一部分,所以不起作用。 I.E. C:users\%USERPROFILE%\Documents

所以得出結論我需要能夠插入一個命名卷閃存驅動器到我的電腦。 插入我的Arduino讓它在CMD,POWERSHELL中輸入一個命令,或者在記事本中創建一個.ps1,但是我遇到的問題是在未使用特定用戶名的路徑中不能識別源目錄路徑可能是因爲我需要在機器和用戶之間使用這種便攜式設備。

回答

1

問題1:
我遇到的問題是,當我通過C的路徑:\用戶\ $ ENV:用戶名\文檔\ Powershell的拋出一個錯誤陳述。

只是假設,但這聽起來像是如何傳遞你的路徑的問題。看看下面的代碼:

'C:\users\$env:username\Documents\' 
"C:\users\$env:username\Documents\" 

兩行都生成一個字符串,但只有第二個「翻譯」到正確的路徑。 PowerShell的正常引號(「)和單引號(')之間的區別。有關更多信息,請參見About Quoting Rules

腳本使用正常報價爲源目錄的工作完全沒在我的測試。

第2期:
接下來,我試圖消除$ SRCDIR參數,並與新的腳本看起來像這樣指定一個變量的路徑: 這也失敗給我的另一條路徑誤差顯然ROBOCOPY被歸咎於我的用戶名在這裏兩次看到:

您在這裏的問題是$ env:用戶名只包含您的用戶名,取決於您開始腳本的位置,您的代碼行爲會有所不同。從C:\ users \ me開始,它轉換爲C:\ users \ me \ me \ documents,您是否會在C:\用戶中將其轉換爲C:\ uses \ me \文件並且它可以工作。相反,與$ ENV一個硬編碼路徑:用戶名,我會用:

"$env:USERPROFILE\Documents" 

問題3: 之所以說它是如此混亂是因爲內不存在這些目錄,ROBOCOPY試圖複製我的文件夾或閃存驅動器。 C:\ Users \ me \ Documents \

robocopy錯誤告訴您它無法在您的目標上寫入,可能是權限/文件系統(NTFS到FAT32?)問題。確保你可以寫在你的閃存驅動器上。 例如嘗試先寫沒有PowerShell腳本只是直接使用robocopy

robocopy C:\users\me\Documents\ F:\ *.pdf /MIR /Z 
+0

關於報價。在我的acutal腳本中沒有引號被附加到文件路徑。報價僅用於該帖子。我應該更清楚。當你說腳本在你身上運行的很好。你是否給了$ SrcDir和確切的文件路徑,即C:users/yourusername /或者你是否傳遞了$ SrcDir參數$ env:username或%USERPROFILE% –

+0

你用第二個問題/語句回答了它。現在你已經指出了這一點。 –