我有以下.ps1用于解压缩zip文件...
param([string]$path)
$shell=new-object -com shell.application
$Location=$shell.namespace($path)
$ZipFiles = get-childitem *.zip
get-childitem $path -include *.xml -recurse | foreach ($_) {remove-item $_.fullname}
foreach ($ZipFile in $ZipFiles)
{
$ZipFile.fullname | out-default
$ZipFolder = $shell.namespace($ZipFile.fullname)
$Location.Copyhere($ZipFolder.items())
}
和以下run.bat文件,用于设置参数并调用.ps1
powershell -command "C:\Users\eric\unzipFile\unzip3.ps1 -path \"C:\Users\eric\unzipFile\""
如果两者都在同一目录中,没有错误,但是如果我将run.bat移动到另一个目录,我会得到以下内容......
You cannot call a method on a null-valued expression.
At C:\Users\eric\unzipFile\unzip3.ps1:12 char:38
+ $Location.Copyhere($ZipFolder.items <<<< ())
+ CategoryInfo: InvalidOperation: (items:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
答案 0 :(得分:2)
您没有指定查找zip文件的路径,因此它会查找当前文件夹。改变如下:
$ZipFiles = get-childitem -Path $path -Filter *.zip
其他提示:使用powershell中的-File参数并添加其他参数以便于调用
powershell -file "C:\Users\eric\unzipFile\unzip3.ps1" -path "C:\Users\eric\unzipFile\"