我在 Windows 2008 R2 服务器中工作,并尝试将 csv 文件中列出的某些文件从一个分区复制到另一个分区,标题为:
Zip文件,站点A,站点B
ZipFile 列包含每个文件的名称 (name.zip)。Site.A
列包含文件在源位置的完整路径。Site.B
列包含文件在目标位置的完整路径。
该脚本的代码是:(我一直在这个网站上寻找想法)
$CSV_Path = "N:\File_with_paths.csv"
$CSV = Import-CSV $CSV_Path
ForEach ($File in $CSV) {
Copy-Item -Path "$($File.'Site.A')$($File.'ZipFile')" -Destination "$($File.'Site.B')"
}
它失败了,但我看不到错误是什么。如果我运行它,它会在不到一秒钟的时间内显示错误,并且脚本不会复制任何文件。
答案1
要调试此命令,请为 cmdlet 设置断点Copy-Item
。这样,只要脚本到达该特定命令,您就会进入调试模式。如果您的脚本名为myCopyScript.ps1
:
Set-PSBreakPoint -Script myCopyScript.ps1 -Command Copy-Item
.\myCopyScript.ps1
脚本现在将运行直到Copy-Item
被调用,此时您将进入循环,但能够与现有的变量进行交互。
这是一个很好的机会来查看你的 $path 名称实际上是什么:
Write-Host "$($File.'Site.A')$($File.'ZipFile')"
完成故障排除后,删除断点并退出 DEBUG 提示:
Get-PSBreakPoint | Remove-PSBreakPoint
Exit # This will simply stop the debugging nested prompt
如果您实际上忘记了\
源目录和文件名之间的区别,这里有一种更安全的方法来获取文件的完整路径:
$SourceFile = Join-Path -Path $File.'Site.A' -ChildPath $File.ZipFile