Проблема
У меня проблема с командным файлом Windows и ярлыками.
Я получаю эту ошибку:
Система не может найти этикетку партии
указанный
Что я пробовал
- два компьютера; WindowsXP и 2003 Сервер.
- Убедился, что он закодирован как ASCII
- Изменен шестнадцатеричный код для символов продолжения строки. Попробовал заменить все на CR, LF и CRLF по очереди. Все комбинации дают мне одинаковую ошибку.
- Попытка вставить дополнительные символы перед меткой, чтобы метка прошла 512 символов.
Вот код:
cls
@echo off
SET zip=7za a dependencies.7z
call:dozip "c:\temp\dir.txt"
pause
goto exit
:dozip
echo Testing 1.2.3...
%zip% %1
goto:eof
:exit
Вот гекс с CRLF (0d 0a).
63 6c 73 0d 0a 53 45 54 20 7a 69 70 3d 37 7a 61 20 61 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 37 7a 0d 0a 63 61 6c 6c 3a 64 6f 7a 69 70 20 22 63 3a 5c 74 65 6d 70 5c 64 69 72 2e 74 78 74 22 0d 0a 0d 0a 70 61 75 73 65 0d 0a 67 6f 74 6f 20 65 78 69 74 0d 0a 0d 0a 3a 64 6f 7a 69 70 0d 0a 20 20 65 63 68 6f 20 54 65 73 74 69 6e 67 20 31 2e 32 2e 33 2e 2e 2e 0d 0a 20 20 25 7a 69 70 25 20 25 31 0d 0a 67 6f 74 6f 3a 65 6f 66 0d 0a 3a 65 78 69 74
Вот вывод консоли (когда я удаляю @echo off):
C:\>SET zip=7za a dependencies.7z
C:\>call:dozip "c:\temp\dir.txt"
C:\>echo Testing 1.2.3...
Testing 1.2.3...
C:\>7za a dependencies.7z "c:\temp\dir.txt"
The system cannot find the batch label specified - dozip
C:\>pause
Press any key to continue . . .
На самом деле он никогда не создает 7zip-файл, поэтому я могу предположить, что он вылетает в этой строке;
7za a dependencies.7z "c:\temp\dir.txt"
Если я сам запускаю эту строку из командной строки, она работает нормально и создает зависимости.7z, поэтому я не думаю, что это обязательно проблема с 7za.exe.
Я уже читал этот вопрос:
stackoverflow.com/questions/232651/why-the-system-cannot-find-the-batch-label-specified-is-thrown-even-if-label-ex
и ссылка с этого поста;
help.wugnet.com/windows/system-find-batch-label-ftopict615555.html
Ответ
Итак, я нашел проблему, ребята.
Я использовал технику, которую я обычно использую, которую я действительно мог описать только как «прокси» командные файлы. У меня есть папка с именем c: \ scripts, и я поместил туда несколько файлов bat, чтобы выбрать наиболее часто используемые exe Это спасает мою переменную PATH от абсолютной массивности со всеми инструментами командной строки. Таким образом, мне нужно только добавить сценарии c: \ в мою PATH и создать командный файл прокси, когда мне что-то понадобится.
У меня был 7za.bat в c: \ scripts, содержащий только это;
@echo off
"C:\Program Files\7-zip\7za.exe" %*
Я изменил свой сценарий на это;
SET zip="c:\program files\7-zip\7za.exe" a dependencies.7z
вместо этого;
SET zip=7za a dependencies.7z
и это сработало безупречно.
Мораль истории ...
Старайтесь не вызывать другие пакетные файлы из пакетного файла. Если вы это сделаете, вам нужно будет поставить перед ними префикс « call ».