我在Powershell中编写了一个简单的备份脚本,实际上是我的第一个PowerShell脚本,所以我可能会遗漏一些明显的东西。
在命令行中我运行:
PS C:\tmp> $source="C:\tmp\source" PS C:\tmp> $dest="C:\tmp\dest" PS C:\tmp> cp "$source\*.txt" "$dest\"
并且一切正常,表现如预期:将所有.txt文件从源代码传递到dest。
当我在script.ps1文件中时,有
copyBackupFiles ("C:\tmp\source", "C:\tmp\dest") function copyBackupFiles($Source, $Dest) { Copy-Item "$Source\name.*" -Destination "$Dest\" }
我收到错误 Copy-Item:找不到路径' C:\ tmp \ source C:\ tmp \ dest'因为它不存在。
有关此问题的任何指示?已经花了几个小时上网,没有运气......
答案 0 :(得分:2)
从
更改行copyBackupFiles ("C:\tmp\source", "C:\tmp\dest")
到
copyBackupFiles "C:\tmp\source" "C:\tmp\dest"
这是因为您传递给参数$source
数组有2个项目,但没有值到$ dest。
不幸的是,对于熟悉C#,Java等语言的人来说,这是一个潜在的陷阱。参数不是用逗号分隔的,而是用空格分隔的,就像在例如F#。
你可以看到使用Trace-Command发生的事情:
function test($a, $b) { write-host $a / $b }
Trace-Command -name parameterbinding { test (1, 2) } -PSHost
Trace-Command -name parameterbinding { test 1 2 } -PSHost