Проблемы с работой разных дисков в пакетном файле - PullRequest
3 голосов
/ 26 августа 2011

Это мой первый пакетный файл, а также мой первый раз с использованием пакетного языка (я обычно использую 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 ]

2 голосов
/ 30 августа 2011

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

Первое, что я не использовал параметр / 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%

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

1 голос
/ 29 августа 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...