Windows命令行中的内存不足

时间:2015-03-27 11:23:11

标签: batch-file cmd buffer pkzip

我创建了一个批处理文件,该文件使用xcopy复制目录以备份。然后我使用pkzip来压缩备份文件夹(并通过正在运行的批处理文件发送电子邮件),但是我收到内存不足的错误消息。我试图在命令行属性中增加缓冲区大小,但它没有工作。我也尝试增加缓冲区的数量,但它也没有用。如果您有任何想法/解决方案,我将很乐意尝试。

我正在执行此备份例程的原因是我希望通过Windows计划任务自动完成这些任务。

提前致谢,

帕诺斯

3 个答案:

答案 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的一种好方法是让您的批处理文件记录要复制的文件。因此,当出现问题时,更容易找到。这就是我发现问题开始的方式。