我编写了一个脚本,从特定文件夹中获取zip文件,并将文件解压缩到特定文件夹。
请检查以下代码
$shell_app=new-object -com shell.application
$zip_file = $shell_app.namespace("C:UsersjhnayakViews_Seagatejhnayak_DDTools_Phase14_Devappsddclibuildwin\..\..\..\..sas2_relmptlib2_relmptlib2_rel.zip")
$destination = $shell_app.namespace("C:UsersjhnayakViews_Seagatejhnayak_DDTools_Phase14_Devappsddclibuildwin\..\..\..\..sas2_relmptlib2_rel")
$destination.Copyhere($zip_file.items())
$shell_app=new-object -com shell.application
$zip_file = $shell_app.namespace((Get-Location).Path + "\..\..\..\..\sas2_relmptlib2_rel" + "$filename")
$destination = $shell_app.namespace((Get-Location).Path + "\..\..\..\..\sas2_relmptlib2_rel")
$destination.Copyhere($zip_file.items())
对于这两个代码,我得到了相同的错误,请检查下面的
You cannot call a method on a null-valued expression.
At line:1 char:38
+ $destination.Copyhere($zip_file.items <<<< ())
+ CategoryInfo : InvalidOperation: (items:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
当我不使用\..\硬编码路径时介于两者之间,效果非常好。
请检查下面的代码
$shell_app=new-object -com shell.application
$zip_file = $shell_app.namespace("C:UsersjhnayakViews_Seagatejhnayak_DDTools_Phase14_Devsas2_relmptlib2_relmptlib2_rel.zip")
$destination = $shell_app.namespace("C:UsersjhnayakViews_Seagatejhnayak_DDTools_Phase14_Devsas2_relmptlib2_rel")
$destination.Copyhere($zip_file.items())
但我想使用前面的一个,这样路径就不应该是硬编码的,它应该适用于所有路径。
导致此错误的原因是什么?我的空值表达式到底是什么?
在将路径传递给$shell_app.namespace()
之前,请尝试解析路径。.Net中有一个方便的方法可以做到这一点:System.IO.Path.GetFullPath()
。像这样,
$relativeLoc = "...buildwin\..\..\..\..sas2..." # Complex dynamic path
$parsedLoc = [IO.Path]::GetFullPath($relativeLoc) # Get absolute path
$zip_file = $shell_app.namespace($parsedLoc)
作为奖励,您可以使用Test-Path
来检查目标$parsedLoc
是否存在。