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盘的主要内容,如果未能解决你的问题,请参考以下文章
无法使用PHP shell_exec执行powershell脚本函数