Недостаточно памяти в командной строке Windows

Я создал командный файл, который копирует каталог с xcopy по причинам резервного копирования. Затем я использую pkzip, чтобы заархивировать папку резервной копии (и отправить ее по электронной почте через работающий пакетный файл), но я получаю сообщение об ошибке из-за недостатка памяти. Я попытался увеличить размер буфера в свойствах командной строки, но это не сработало. Я также пытался увеличить количество буферов, но это тоже не сработало. Если у вас есть какие-либо мысли / решения, я буду рад их попробовать.

Причина, по которой я делаю эту процедуру резервного копирования, заключается в том, что я хочу, чтобы эти задачи выполнялись автоматически с помощью задач расписания Windows.

Заранее спасибо,

Панос

1 ответ

Я тоже получил эту ошибку: Insufficient memory, Я нашел соответствующий ответ по этой ссылке: http://www.terminally-incoherent.com/blog/2007/02/05/xcopy-insufficient-memory/

Похоже, что это сообщение появляется, когда полное имя (т. Е. С путем) скопированного файла длиннее 254 символов, что кажется максимальной длиной пути Windows.

В заключение - xxcopy работает, но robocopy работает лучше.

Наконец мой командный файл выглядит так

@echo off
ROBOCOPY "H:\Laptop-Backup" "E:\Laptop-Backup" /s

rem /e: Include directories and sub directories even if empty
REM /s Copy Subdirectories, but not empty ones.

Надеюсь, поможет.

Стандартные инструменты командной строки Windows, такие как xcopy, rmdir, не могут работать с путями, превышающими MAX_PATH(260 символов). Если вы хотите удалить каталог, содержащий такой файл, полный путь которого длиннее MAX_PATH, или если вы хотите рекурсивно скопировать каталог в такое место, где полный путь хотя бы к одному из его файлов будет длиннее MAX_PATH, тогда эти инструменты командной строки не работают.

Однако вы можете обойти это с помощью инструмента командной строки "move", потому что, в отличие от 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 "перемещение" может перемещать каталоги только в пределах одной буквы диска.

Для меня проблема заключалась в том, что xcopy пытался скопировать файлы с очень длинными именами внутри определенного каталога (назовите его /Documents/LongNames), содержащего множество этих типов имен. Поскольку в моем случае файлы с длинными именами были объединены, я заархивировал подкаталог Documents/LongNames в один zip-файл, поскольку я не использую его часто. Резервное копирование всех моих файлов в /Documents с помощью xcopy теперь работает нормально. В общем, хороший способ отладки xcopy большого пакета - сделать так, чтобы ваш пакетный файл регистрировал файлы, которые он копирует. Поэтому, когда есть проблема, ее легче найти. Вот как я обнаружил проблему.

Другие вопросы по тегам