Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 将文件夹内容复制到已创建的.zip文件:';找不到文件或没有读取权限';_Windows_Jscript_Wsh - Fatal编程技术网

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

Windows 将文件夹内容复制到已创建的.zip文件:';找不到文件或没有读取权限';,windows,jscript,wsh,Windows,Jscript,Wsh,我试图使用JScript从现有文件夹创建一个.zip文件,但我的copyHere函数似乎没有复制到.zip文件夹。相反,我会看到一个标题为“压缩(压缩)文件夹错误”的弹出框,其中显示消息“找不到文件或没有读取权限”,尽管根据file.attributes属性(32)的值,我对该文件具有读取/写入权限 以下是我正在使用的脚本: //获取命令行参数 var objArgs=WScript.Arguments; var-zipPath=objArgs(0); var sourcePath=objArg

我试图使用JScript从现有文件夹创建一个.zip文件,但我的copyHere函数似乎没有复制到.zip文件夹。相反,我会看到一个标题为“压缩(压缩)文件夹错误”的弹出框,其中显示消息“找不到文件或没有读取权限”,尽管根据file.attributes属性(32)的值,我对该文件具有读取/写入权限

以下是我正在使用的脚本:

//获取命令行参数
var objArgs=WScript.Arguments;
var-zipPath=objArgs(0);
var sourcePath=objArgs(1);
//创建空ZIP文件并打开以添加
var fso=新的ActiveXObject(“Scripting.FileSystemObject”);
var file=fso.CreateTextFile(zipPath,true);
//为.zip创建22字节的“指纹”
文件。写入(“PK”);
file.write(String.fromCharCode(5));
file.write(String.fromCharCode(6));
write('\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0');
var objShell=newActiveXObject(“shell.application”);
var zipFolder=新对象;
zipFolder=objShell.NameSpace(zipPath);
sourceItems=objShell.NameSpace(sourcePath.items();
if(zipFolder!=null)
{
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,现在包含了源文件夹的内容。这可能是权限问题吗?什么可能导致这种行为


旁注,使用vbScript和相同的命令,我可以成功地创建和填充.zip,那么为什么使用jscript它不起作用呢

Set objArgs=WScript.Arguments
ZipFile=objArgs(0)
SourceFolder=objArgs(1)
'创建空ZIP文件并打开以添加
CreateObject(“Scripting.FileSystemObject”).CreateTextFile(ZipFile,True)。编写“PK”&Chr(5)&Chr(6)&String(18,vbNullChar)
设置zip=CreateObject(“Shell.Application”).NameSpace(ZipFile)
'获取源文件夹中的项目
设置sourceItems=CreateObject(“Shell.Application”).NameSpace(SourceFolder).Items
'将所有文件/目录添加到.zip文件
zip.CopyHere(sourceItems)
WScript.Sleep 1000'等待复制项目


非常感谢您的宝贵意见,谢谢

正如Raymond所说,问题在于我创建的
文件
变量中有一个对.zip文件夹的打开引用(该变量对文件夹有一个锁,因此我无法将任何内容复制到该文件夹)解决方案是调用

file.Close()


写入文件后,我们可以通过这种方式访问该文件以将内容复制到该文件:)

我遇到了相同的问题(未找到文件或没有读取权限,尽管根据我的file.attributes属性的值,我对该文件具有读/写权限)。
当我在要使用copyhere方法复制的目录中的某个位置找到并抑制长度为0的文件时,问题就迎刃而解了

你知道vb和js的版本不一样。js版本有一个“file”变量,但vb没有。这就是问题所在。您没有关闭该文件,但仍有对该文件的引用,因此它无法自动关闭。如果您是正确的,我只需在编写后调用file.close()。你应该把它作为一个答案,这样我可以给你一些代表。请随意写下你自己的答案并接受它。我不同意这个答案。我的VBScript在创建后立即关闭文件。该脚本成功地压缩了大约200个文件,然后在一个既不是0字节也不是特别大的文件上突然失败。这是由其他原因造成的。这个答案涉及到使用JScript的问题。如果您使用的是VBScript,您要寻找的答案可能不在这里。好的,抱歉。我曾试图撤销我的否决票,但我担心它不会让我这么做。但希望我的评论对将来使用VBScript的人有用。到目前为止,唯一看起来可能有助于解决此问题的方法是在CopyHere报告文件计数已更改后再添加500-1000毫秒的睡眠时间。可以想象,CopyHere可能会增加项目数,但在实际释放文件之前会有一点延迟。实验继续。。。