Это мой первый пакетный файл, а также мой первый раз, когда я использую пакетный язык (обычно я использую 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
Проблемы возникают, когда я пытаюсь специально скопировать файлы, а также создавать и удалять каталоги.
Я надеюсь, что кто-нибудь скажет мне, какие варианты я должен использовать, чтобы исправить проблемы.
С уважением!
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%
Теперь все проблемы устранены и скрипт работает исправно :)
Это связано с тем, что командные файлы по умолчанию не обращаются к другим дискам, кроме диска C: \. Даже если вы откроете командную строку, вы не сможете CD D:\
. Попробуйте это (не уверен, что это сработает, потому что я никогда не пробовал)
PUSHD D:\
C:\Users\TC\testInstall> install.bat D:\Documents\installTarget
Или используйте PUSHD D:\
, затем временно переместите установочный файл в D: \ и установите. Только решения, о которых я могу думать.
Похожие вопросы
Новые вопросы
windows
Написание программного обеспечения, специфичного для операционной системы Microsoft Windows: API-интерфейсы, поведение и т. Д. ОБЩАЯ ПОДДЕРЖКА WINDOWS НЕВОЗМОЖНА. Вопросы поддержки можно задать на https://superuser.com