RoboCopy在通用文件path中给出错误

我正在进行一些Arduino HID的研究。 我试图设置我的Leo打开PowerShell,并通过卷名将我的“文档”文件夹中的所有.pdf备份到闪存驱动器。

我希望这是可移植到不同的机器。 所以不能使用包含用户名的指定文件path。

我find的原始脚本就是这个。

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\pathC:\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参数,并使用新脚本在variables中指定path,如下所示:

 param([parameter(mandatory=$true)]$VolumeName) $backupDrive = $null get-wmiobject win32_logicaldisk | % { if ($_.VolumeName -eq $VolumeName) { $backupDrive = $_.DeviceID } } $backupPath = $backupDrive + "\" $source=@($env:username + "\Documents\") $destination=@($backupPath) robocopy $source $destination *.pdf /mir /z 

这失败了,给我的另一个path错误显然robocopyinput我的用户名两次看到这里:

  ------------------------------------------------------------------------------- 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. 

所以我编辑了最后一行,包括一个直接的path,没有变化。

 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... 

之所以这么混淆,是因为这些robocopy试图复制的目录不存在于我的文档文件夹中,也不是闪存驱动器。 C:\用户\我\文件\

C:\ Users \ me \ Documents \ My Music \ C:\ Users \ me \ Documents \ My Pictures \ F:\ My Pictures \

所以我完全难住了,来到这里请求专业人士一些帮助。 我也尝试了%USERNAME%%USERPROFILE%在文件path使用相同的脚本变化我上面所述,但由于robocopy假设他们是实际path名称的一部分,不起作用。 IE C:users\%USERPROFILE%\Documents

所以得出结论,我需要能够插入一个命名卷闪存驱动器到我的电脑。 插入我的Arduino,在CMD,POWERSHELL中input一个命令,或者在记事本中创build一个.ps1,但是我遇到的问题是在不能使用path中的特定用户名时不能识别源目录path因为我需要在机器和用户之间使用这种便携式设备。

问题1:
我遇到的问题是,当我通过C:\ users \ $ env路径:用户名\ Documents \ Powershell引发错误说明。

只是假设,但这听起来像是如何传递你的路径的问题。 看看下面的代码:

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

两行都生成一个字符串,但只有第二个“翻译”到正确的路径。 Powershell区分普通引号(“)和单引号(')。有关详细信息,请参阅关于引用规则 。

该脚本在我的测试中使用源目录的普通引号完全正常工作。

问题2:
接下来,我尝试删除$ srcDIR参数,并在新的脚本中指定一个变量的路径如下所示:失败,给我另一个路径错误显然robocopy输入我的用户名两次在这里看到:

你的问题在这里是$ env:用户名只包含你的用户名,取决于你开始脚本的位置,你的代码会有不同的表现。 从C:\ users \ me开始,它转换为C:\ users \ me \ me \ documents,你会在C:\ users中翻译成C:\ uses \ me \ documents,它可以工作。 而不是用$ env:username的硬编码路径,我会使用:

 "$env:USERPROFILE\Documents" 

问题3:之所以这么混乱是因为这些robocopy试图复制的目录不存在于我的文档文件夹中,也不是闪存驱动器。 C:\用户\我\文件\

robocopy错误告诉你它不能写在你的目标上,可能是一个权限/文件系统(NTFS到FAT32)的问题。 确保你可以写在你的闪存驱动器上。 例如,先尝试不使用powershell脚本直接使用robocopy

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