【问题标题】:Powershell error copy-item cannot bind argument to parameter 'path' because it is nullPowershell 错误复制项无法将参数绑定到参数“路径”,因为它为空
【发布时间】:2018-12-18 11:21:52
【问题描述】:

我对 Powershell 比较陌生,并且对我收到的错误有疑问。浏览堆栈溢出后,我发现用户在拼写等方面犯了错误,因此我没有找到适合我的问题的答案。

我有一个脚本运行一些数据的备份并将其压缩并将其存储为:

yyyyMMddsometext.7z

我有另一个脚本来获取最新备份(如果已创建)并将其复制到另一个位置

我收到一个错误

复制项无法将参数绑定到参数“路径”,因为它为空

这是否意味着该文件不存在或者是以下任何一个错误?

$c = $textBox.Text
$a = (Get-Date).AddDays(-1).ToString($c)                                                        
$b = Get-ChildItem "C:\BackupsRP1" -Filter *.7z | Where-Object BaseName -like "*$a*" 
Copy-Item $b -Destination "C:\Users\user\Desktop"

上面的代码是一个简单的 GUI,用户可以输入格式为 yyyyMMdd 的日期,它会比用户输入的文件少一天的时间找到文件并将其复制到该位置。

谢谢你, J

【问题讨论】:

  • 错误指出$b 不包含任何值。这可能是因为您的过滤器没有找到匹配的文件,或者是因为该文件不存在或过滤器错误。将$a写入控制台并确保文件名正确。
  • @Paxz 感谢您的澄清。如果文件所在的位置可以在周一到周日的任意数量的文件夹中,它是否仍会找到该文件(如果存在)并复制它?还是我需要指定在每个文件夹中搜索?
  • $c 的值是多少?
  • $c 是格式为 yyyyMMdd 的用户输入日期,因为我正在查找的文件每天都会备份,我们需要获取指定日期前一天备份的文件。因此会弹出一个 GUI,说“以 yyyyMMdd 格式输入日期”,并将其插入值 $c @marsze
  • @jasony4 我猜应该没问题。

标签: powershell


【解决方案1】:

$b 可能包含多个文件,甚至根本不包含,具体取决于您的过滤器找到的内容。

正确的原因:

# This will copy each of the files that
Get-ChildItem "C:\BackupsRP1" -Filter *.7z | where BaseName -like "*$a*" | Copy-Item -Destination "C:\Users\user\Desktop" -PassThru

这将复制所有匹配过滤器的项目,然后将复制的文件输出到控制台。

另外,请确保 $a 确实包含您想要的内容。 (我不知道,因为我不知道你的文本框中有什么。)

【讨论】:

  • 去试试这个会回复你的。感谢大家的帮助!
  • @jasony4 另一个可能的陷阱:文件是在文件夹的顶层还是任何子文件夹中?即使我有时仍然忘记-Recurse
【解决方案2】:

您必须确保变量中的值符合预期,您可以添加日志记录以进行调试。

$c = $textBox.Text
$c > c:\temp\Debug.log
$a = (Get-Date).AddDays(-1).ToString($c)                                                        
$a >> c:\temp\Debug.log
$b = Get-ChildItem "C:\BackupsRP1" -Filter *.7z | Where-Object BaseName -like "*$a*" 
$b >> c:\temp\Debug.log
Copy-Item $b.FullName -Destination "C:\Users\user\Desktop"

$b 将包含 FileInfo 对象,您必须从对象中选择 fullname 属性(文件的完整路径)。

【讨论】:

  • 谢谢!非常有用的工具。我发现该文件不存在,这就是我返回错误的原因。需要复制的文件可以在标记为从星期日到星期一的任何一个文件夹中。我是否需要创建循环来搜索每个文件夹,或者如果我指定 BackupsRP1 是否会搜索该目录中的所有文件夹?
  • 您可以将-Recurse-Include Monday,Tuesday,...,sunday 一起用于Get-ChildItem
猜你喜欢
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 2020-02-09
  • 1970-01-01
  • 2017-03-09
相关资源
最近更新 更多