Charliemops
Charliemops

Reputation: 769

Problems working with different drive units in a batch file

This is my first batch file, and also my first time with batch language (I usually use UNIX and don't know a lot about Windows commands).

I'm creating a batch file called install.bat which does all the work to install a Java application from source files. Here a snapshot of the install section:

@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

NOTE: The javac and jar commands are correct, at least work in my machine.

Well, the script works correctly when I test it with the INSTALL_DIR belonging to the same drive where I execute it, but if I use a target directory out of the drive where I'm executing, I have problems.

Executions without problems (called in a cmd.exe session):

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

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

Execution with problems (called in a cmd.exe session): C:\Users\TC\testInstall> install.bat D:\Documents\installTarget

The problems happen when I try to copy files specially, but also making and removing directories.

I hope someone can tell to me which options I must use in order to fix the problems.

Regards!

Upvotes: 3

Views: 4363

Answers (2)

Charliemops
Charliemops

Reputation: 769

Well, I have two mistakes that I fixed and then the script work correctly.

The first was that I didn't use the /d option in cd command in order to change also the drive unit. It means, C:Users\TC> cd D:\Documents is wrong, the correct command is the following: C:Users\TC> cd /d D:\Documents as well as the MS-DOS manual page indicates.

The second error, it wasn't actually an error, I put rm -rf %INSTALL_DIR% (like in Linux) instead of the correct Windows command rd /s/q %INSTALL_DIR%

Now all the problems have been fixed and the script works properly :)

Upvotes: 3

Anthony Miller
Anthony Miller

Reputation: 15930

It has to do with batch files not accessing other drives than the C:\ drive by default. Even if you open up your command line, you shouldn't be able to CD D:\. Try this (not sure if this will work as I have never tried it)

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

Or else, use PUSHD D:\ then move the install file to D:\ temporarily and install. Only solutions I can think of.

Upvotes: 1

Related Questions