Это мой первый пакетный файл, а также мой первый раз, когда я использую пакетный язык (обычно я использую UNIX и не очень разбираюсь в командах Windows).

Я создаю пакетный файл под названием install.bat, который выполняет всю работу по установке приложения Java из исходных файлов. Вот снимок раздела установки:

@ECHO off
SET INSTALL_DIR=%1\
SET SRC_DIR=sources\
SET LIB_DIR=lib\
SET IMG_DIR=img\
SET BIN_DIR=bin\
SET INIT_DIR=%CD%
SET MAIN_CLASS=%SRC_DIR%\main\Main.java
SET CLASS_PATH=%LIB_DIR%log4j.jar;%LIB_DIR%jdom.jar;
SET JAR_NOM=myApp.jar
SET JAR_MF=MANIFEST.MF

:BEGIN
CLS
ECHO Checking directory...
IF EXIST %INSTALL_DIR% (
    GOTO Ask_Overwrite 
) ELSE (
    GOTO Install
)

:Ask_overwrite
SET OVERW=Y
SET /P OVERW="The program is already installed. Overwrite? ([Y]/N): "
IF %OVERW%==N GOTO Cancel
IF %OVERW%==n GOTO Cancel
IF %OVERW%==Y (
    RD /S /Q %INSTALL_DIR% <--- Here was the error
    GOTO Install
)
IF %OVERW%==y (
    RD /S /Q %INSTALL_DIR% <--- Here was the error
    GOTO Install
)
GOTO Ask_overwrite

:Install
MD %INSTALL_DIR%   
XCOPY . %INSTALL_DIR% /E
CD /D %INSTALL_DIR%
MD %BIN_DIR%

ECHO Compiling...
javac -cp %CLASS_PATH% -sourcepath %SRC_DIR% %MAIN_CLASS% -d %BIN_DIR%

ECHO Creating JAR file...
jar cfm %JAR_NOM% %JAR_MF% -C %BIN_DIR% .

ECHO Succes! The application has been installed in %INSTALL_DIR%
GOTO CleanUp

:Abort
ECHO Abort! The application has not been installed.
GOTO CleanUp

:Cancel
ECHO Canceled by user. The application has not been installed.
GOTO END

:Cleanup
REM Code for clean up
GOTO END

:END
CD /D %INIT_DIR%
PAUSE

ПРИМЕЧАНИЕ. Команды javac и jar верны, по крайней мере, работают на моей машине.

Что ж, сценарий работает правильно, когда я тестирую его с INSTALL_DIR, принадлежащим тому же диску, на котором я его выполняю, но если я использую целевой каталог вне диска, на котором я выполняю, у меня возникают проблемы.

Выполнение без проблем (вызывается в сеансе cmd.exe):

C:\Users\TC\testInstall> install.bat .\..\installTarget

C:\Users\TC\testInstall> install.bat C:\Users\TC\installTarget

Выполнение с проблемами (вызывается в сеансе cmd.exe): C:\Users\TC\testInstall> install.bat D:\Documents\installTarget

Проблемы возникают, когда я пытаюсь специально скопировать файлы, а также создавать и удалять каталоги.

Я надеюсь, что кто-нибудь скажет мне, какие варианты я должен использовать, чтобы исправить проблемы.

С уважением!

3
Charliemops 26 Авг 2011 в 12:10

2 ответа

Лучший ответ

Что ж, у меня есть две ошибки, которые я исправил, и тогда скрипт заработал правильно.

Во-первых, я не использовал параметр / d в команде cd, чтобы также изменить привод. Это означает, что C:Users\TC> cd D:\Documents неверно, правильная команда следующая: C:Users\TC> cd /d D:\Documents, а также указано на странице руководства MS-DOS.

Вторая ошибка, на самом деле это не была ошибка, я поставил rm -rf %INSTALL_DIR% (как в Linux) вместо правильной команды Windows rd /s/q %INSTALL_DIR%

Теперь все проблемы устранены и скрипт работает исправно :)

2
Charliemops 30 Авг 2011 в 09:07

Это связано с тем, что командные файлы по умолчанию не обращаются к другим дискам, кроме диска C: \. Даже если вы откроете командную строку, вы не сможете CD D:\. Попробуйте это (не уверен, что это сработает, потому что я никогда не пробовал)

PUSHD D:\
C:\Users\TC\testInstall> install.bat D:\Documents\installTarget

Или используйте PUSHD D:\, затем временно переместите установочный файл в D: \ и установите. Только решения, о которых я могу думать.

1
Anthony Miller 29 Авг 2011 в 13:46