我创建了一个批处理文件,该文件使用xcopy复制目录以备份。然后我使用pkzip来压缩备份文件夹(并通过正在运行的批处理文件发送电子邮件),但是我收到内存不足的错误消息。我试图在命令行属性中增加缓冲区大小,但它没有工作。我也尝试增加缓冲区的数量,但它也没有用。如果您有任何想法/解决方案,我将很乐意尝试。
我正在执行此备份例程的原因是我希望通过Windows计划任务自动完成这些任务。
提前致谢,
帕诺斯
答案 0 :(得分:6)
我也遇到了这个错误:var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var xhr = new XMLHttpRequest();
var sys = require('util');
var json_text2 = { "username": "admin","password": "-----" };
var apicem_ip = "sandboxapic.cisco.com:9443";
var apic_url = 'https://'+apicem_ip+'/api/v1/ticket';
//- var xmlHTTP = new XMLHttpRequest();
xhr.onreadystatechange = function() {
sys.puts("State: " + this.readyState);
if (this.readyState === 4) {
sys.puts("Complete.\nBody length: " + this.responseText.length);
sys.puts("Body:\n" + this.responseText);
}
};
xhr.open("POST",apic_url,true);
xhr.setRequestHeader("Content-type","application/json");
xhr.setRequestHeader("Accept","application/json");
xhr.responseType = 'JSON';
xhr.send(JSON.stringify(json_text2));
app.locals.apic_nd = xhr.responseText;
。我在此链接中找到了相关答案:http://www.terminally-incoherent.com/blog/2007/02/05/xcopy-insufficient-memory/
看来这条消息出现在完全合格的时候(即。 with path)复制文件的名称超过254个字符 似乎是Windows的最大路径长度。
总之 - xxcopy可行,但robocopy效果更好。
最后我的批处理文件看起来像这样
Insufficient memory
希望它有所帮助。
答案 1 :(得分:1)
标准Windows命令行工具(例如xcopy,rmdir)不能在长度超过MAX_PATH(260个字符)的路径上运行。如果要删除包含完整路径比MAX_PATH长的文件的目录,或者要递归复制目录到至少一个文件的完整路径比MAX_PATH长的地方,则这些命令行工具失败。
不过,您可以使用“ 移动”命令行工具绕过它,因为与xcopy和rmdir(rd)不同,它似乎并没有一步一步地遍历目录中的文件。 这种解决方法可能并不总是很方便,并且需要采取其他措施,但是出于自动化/脚本的目的,如果您不能或不希望使用特殊工具(例如robocopy),我看不到任何其他方式。这种方式适用于目录,但不适用于单个文件。让我举个例子。
创建目录。路径长度:245个字符
E:\>mkdir E:\veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongdirectory
您可以在其中创建文件,以便文件路径长度大于MAX_PATH。通常不会起作用。
E:\>echo "content" > E:\veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongdirectory\longlonglonglonglongfilename.txt
The system cannot find the path specified.
解决方法:创建一个带有短路径的文件,并将包含文件的目录移到长路径中。
E:\>echo "content" > somedir\longlonglonglonglongfilename.txt
E:\>move somedir E:\veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongdirectory\
1 dir(s) moved.
检查1:目录是否已完全移动(包含所有文件)? -是的。
E:\>dir E:\veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongdirectory\somedir
Volume in drive E is Workspace
Volume Serial Number is C864-7C96
Directory of E:\veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongdirectory\somedir
08/09/2019 11:52 AM <DIR> .
08/09/2019 11:52 AM <DIR> ..
08/09/2019 11:52 AM 12 longlonglonglonglongfilename.txt
1 File(s) 12 bytes
2 Dir(s) 130,574,221,312 bytes free
检查2。该路径实际上比MAX_PATH长,这就是为什么通常的命令行工具无法通过完整路径访问它的原因,所以我们做了所有正确的操作:
E:\>dir E:\veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongdirectory\somedir\longlonglonglonglongfilename.txt
Volume in drive E is Workspace
Volume Serial Number is C864-7C96
Directory of E:\veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongdirectory\somedir
File Not Found
如果要(使用rmdir)删除包含路径大于MAX_PATH的子文件夹/文件的目录,则相同的解决方法有效。只需将上层目录移动到一些短的临时位置,即可在其中进行rmdir。
注意:Windows命令行工具“移动”只能在同一磁盘字母内移动目录。
答案 2 :(得分:1)
对我来说,问题是xcopy试图在包含许多这类名称的特定目录(称为/ Documents / LongNames)中复制文件名非常长的文件。因为在我的情况下,所有带有长名的文件都放在一起,所以我将Documents / LongNames子目录压缩到一个zip文件中,因为我不经常使用它。使用xcopy备份/ Documents中所有文件的备份现在可以正常工作。 通常,调试大批量xcopy的一种好方法是让您的批处理文件记录要复制的文件。因此,当出现问题时,更容易找到。这就是我发现问题开始的方式。