Powershell脚本找不到C盘

Posted

技术标签:

【中文标题】Powershell脚本找不到C盘【英文标题】:Power Shell Script cant find C disk 【发布时间】:2018-09-14 12:07:28 【问题描述】:

所以我一直在尝试制作一个脚本,将用户“文档”、“照片”文件夹等中的所有文件复制到另一个驱动器上的单个文件夹中。 但是脚本一直在说:

Copy-Item : Cannot find drive. A drive with the name '‪c' does not exist.
At C:\Users\sebbe\Downloads\Untitled1.ps1:23 char:1
+ Copy-Item -Path "‪c:\Users\$user\Desktop\*" -Destination D:\mapp1\$us ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (‪c:String) [Copy-Item], DriveNotFoundExcept 
   ion
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.CopyItemCommand

我以管理员身份通过 Power Shell ISE 运行脚本,我在两台不同的 PC 上尝试了该脚本,但同样失败。

为什么脚本找不到 C: 盘?

这是整个脚本:

$User = Read-Host "New Username"

Function makeDir 
    New-Item -Path D:\mapp1 -Name "$User" -ItemType Directory 

Function copyDesktop 
    Copy-Item -Path "C:\Users\$User\Desktop" -Destination "D:\mapp1\$User\Desktop" -Recurse


Function copyDocuments 
    Copy-Item -Path "‪C:\Users\$User\Documents" -Destination "D:\mapp1\$User\Documents" -Recurse


Function copyPictures 
    Copy-Item -Path ‪‪"C:\Users\$User\Pictures" -Destination "D:\mapp1\$User\Pictures" -Recurse


makeDir
copyDocuments
copyPictures
copyDesktop

【问题讨论】:

你试过把路径放在引号里吗? Copy-Item -Path ‪‪'C:\users\$user\Pictures\*' -Destination 'D:\mapp1\$user\Pictures\' 是的,我已经尝试过使用 ' 和 " Get-PSDrive 说什么?你看到字母 C 的驱动器了吗? 是的,我确实看到了字母 C 的驱动器。感谢您的输入! :) @Seb 好吧,你的脚本很有道理,所以我必须确保它不是愚蠢的:(试试Copy-Item -Path "C:\Users\$User\Desktop" -Destination "D:\mapp1\$User\Desktop" -Recurse 【参考方案1】:

您的问题很可能是 PowerShell 无法正确扩展字符串。为了确保您有一个字符串,将您的路径封装在 "C:\users\$User\Documents" 之类的引号中。那么你不想在路径的末尾使用\*。只需使用Copy-Item 的内置-Recurse 参数即可。如果您不使用递归参数,您可能需要多次运行副本。

$user = Read-Host "New Username"

Function makeDir 
    New-Item -Path D:\mapp1 -Name "$user" -ItemType Directory 


Function makeDesktop 
    New-Item -Path D:\mapp1\$user\ -Name "$user Skrivbord" -ItemType Directory 


Function makeDocuments 
    New-Item -Path D:\mapp1\$user\ -Name "$user Dokument" -ItemType Directory 


Function makePictures 
    New-Item -Path D:\mapp1\$user\ -Name "$user Bilder" -ItemType Directory 
 

Function kopieraDesktop 
    Copy-Item -Path "‪C:\Users\$user\Desktop" -Destination "D:\mapp1\$user\Desktop"


Function kopieraDocuments 
    Copy-Item -Path ‪"C:\Users\$user\Documents" -Destination "D:\mapp1\$user\Documents"


Function kopieraPictures 
    Copy-Item -Path ‪‪"C:\users\$user\Pictures" -Destination "D:\mapp1\$user\Pictures"


makeDir
makeDesktop
makeDocuments
makePictures
kopieraDesktop
kopieraDocuments
kopieraPictures

【讨论】:

我已经尝试了您的建议,并在主帖中发布了新代码。但是我在尝试复制图片和文档文件夹时仍然收到错误。 这种情况发生在所有用户身上,还是只发生在部分用户身上?如果将“C:\users\$user\Pictures\”和“D:\mapp1\$user\Pictures”输出到控制台会得到什么?结果字符串是有效路径吗?也就是说,您可以导航到它们,运行脚本的用户是否可以访问它们等等? 由于我在两台不同的 PC 上运行脚本,是的,它适用于所有用户。我确实可以访问 Power Shell 的路径。 :) 我觉得很奇怪,因为桌面副本可以工作,而文件/图片却不行。它们在我看来是一样的(?)【参考方案2】:

不知何故,我已经成功了。

这就是代码现在的样子:

$User = Read-Host "New Username"

Function makeDir 
    New-Item -Path D:\mapp1 -Name "$User" -ItemType Directory 

Function copyDesktop 
    Copy-Item -Path "C:\Users\$User\Desktop" -Destination "D:\mapp1\$User\Desktop" -Recurse


Function copyDocuments 
    Copy-Item -Path "C:\Users\$User\Documents" -Destination "D:\mapp1\$User\Documents" -Recurse


Function copyPictures 
    Copy-Item -Path "C:\Users\$User\Pictures" -Destination "D:\mapp1\$User\Pictures" -Recurse


makeDir
copyDocuments
copyPictures
copyDesktop

非常感谢 Shawn Esterman,当然还有其他所有人! :)

【讨论】:

以上是关于Powershell脚本找不到C盘的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell脚本:随机密码生成器

运行 powershell -command 时找不到类型

如何在命令行执行 powershell 脚本

无法使用PHP shell_exec执行powershell脚本函数

ORA-00923: 使用 shell 脚本在预期的地方找不到 FROM 关键字

如何制作 PowerShell FTPS 脚本 (SSL) 来上传单个文件?