将文件夹内容复制到创建的.zip文件:'找不到文件或没有读取权限'

时间:2013-02-05 03:37:13

标签: windows jscript wsh

我正在尝试使用JScript从现有文件夹创建.zip文件,似乎我的copyHere函数没有复制到.zip文件夹。相反,我得到一个标题为“压缩(压缩)文件夹错误”的弹出框,其中包含“未找到文件或没有读取权限”的消息,即使我根据file.attributes属性的值对文件具有读/写权限(32 )。

这是我正在使用的脚本:

//Get commman line arguments
var objArgs = WScript.Arguments;
var zipPath = objArgs(0);
var sourcePath = objArgs(1);

//Create empty ZIP file and open for adding
var fso = new ActiveXObject("Scripting.FileSystemObject");

var file = fso.CreateTextFile(zipPath, true);
// Create twenty-two byte "fingerprint" for .zip
file.write("PK");
file.write(String.fromCharCode(5));
file.write(String.fromCharCode(6));
file.write('\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0');

var objShell = new ActiveXObject("shell.application");
var zipFolder = new Object;

zipFolder = objShell.NameSpace(zipPath);

sourceItems = objShell.NameSpace(sourcePath).items();    

if (zipFolder != null)
{
    zipFolder.CopyHere(sourceItems);  
    WScript.Sleep(1000);      
}

现在CopyHere函数用于将sourcePath的内容复制到普通文件夹,但是当我尝试创建.zip文件并将内容复制到该文件时,没有任何反应。关于为什么copyHere没有将sourcePath的内容复制到.zip?

的任何想法 用于调用此脚本的

示例将是:

cscript win-zip.js C:\desired\zip\file.zip C:\path\to\source\folder

期望的结果将是file.zip已创建,现在包含源文件夹的内容。这可能是权限问题吗?什么可能导致这种行为?


Side Note ,使用vbScript和相同的命令我可以成功创建和填充.zip,为什么不使用jscript呢?

Set objArgs = WScript.Arguments
ZipFile = objArgs(0)
SourceFolder = objArgs(1)

' Create empty ZIP file and open for adding
CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
Set zip = CreateObject("Shell.Application").NameSpace(ZipFile)

' Get items in source folder
Set sourceItems = CreateObject("Shell.Application").NameSpace(SourceFolder).Items

' Add all files/directories to the .zip file
zip.CopyHere(sourceItems)
WScript.Sleep 1000 'Wait for items to be copied

非常感谢任何有用的评论,谢谢!

2 个答案:

答案 0 :(得分:4)

我遇到了同样的问题(找不到文件或没有读取权限',即使我根据file.attributes属性的值对文件有读/写权限)。 我发现并在使用copyhere方法复制的目录中某处抑制0长度文件时,问题就消失了。

答案 1 :(得分:1)

正如Raymond所说,问题是我对我创建的file变量中的.zip文件夹有一个开放引用(它对文件夹有锁定,所以我无法将任何内容复制到它) 。 解决方案是致电

file.Close();

写入文件后,我们可以访问该文件将内容复制到其中:)