代码位于底部。简单地说,当我运行代码时,我的.ps1文件移动没有问题,但由于某种原因,任何带有“Lec”作为其名称一部分的文件将弹出此错误消息:
cp:找不到路径'C:\ Users \ Administrator \ Documents \ Win213x_Lec_filename.docx',因为它没有 存在。
我不明白为什么会在识别文件名时发生这种情况,并且我仔细检查确切文件是否在具有确切名称的目录中,但我的ps1文件没有问题。
$sub1 = "Lectures"
$sub2 = "Labs"
$sub3 = "Assignment"
$sub4 = "Scripts"
$DirectoryName = "test"
$Win213CopyFiles = ls C:\Users\Administrator\Documents\Win213Copy
$count = 0
foreach ($i in $Win213CopyFiles)
{
if ($i -match ".*Lec.*")
{
cp $i C:\Users\Administrator\Documents\test\Lectures
$count = $count + 1
}
elseif ($i -match ".*Lab.*")
{
cp $i C:\Users\Administrator\Documents\$DirectoryName\$sub2
$count = $count + 1
}
elseif ($i -match ".*Assign.*")
{
cp $i C:\Users\Administrator\Documents\$DirectoryName\$sub3
$count = $count + 1
}
elseif ($i -match ".*.ps1")
{
cp $i C:\Users\Administrator\Documents\$DirectoryName\$sub4
$count = $count + 1
}
Write-host "$i"
}
## Step 9: Display a message "<$count> files moved"
###################################
Write-host "$count files moved"
答案 0 :(得分:1)
Copy-Item
期望String
作为输入。因此,它调用ToString()
对象FileInfo
的{{1}}方法。它只返回文件名,而不是完整路径。由于未指定源目录,因此使用当前工作目录。解决方案是使用$i
属性中的完整路径:
fullname
来自管道cp $i.fullname C:\Users\Administrator\Documents\test\Lectures
可以使用Copy-Item
属性正确处理FileInfo
个对象。如果使用fullname
,您应该记住不要放弃。