windows - Problemer med at arbejde med forskellige drev enheder i en batchfil

Indlæg af Hanne Mølgaard Plasc

Problem



Dette er min første batchfil, og også min første gang med batch sprog (jeg bruger normalt UNIX og ved ikke meget om Windows-kommandoer).


Jeg laver en batchfil kaldet install.bat, som gør alt for at installere en Java-applikation fra kildefiler. Her et øjebliksbillede af installationsafsnittet:


@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\%mainMain.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


BEMÆRK: Javac og jar kommandoer er korrekte, i det mindste arbejde i min maskine.


Jo, scriptet fungerer korrekt, når jeg tester det med INSTALL\_DIR, der tilhører det samme drev, hvor jeg udfører det, men hvis jeg bruger en målkatalog ud af drevet, hvor jeg udfører, har jeg problemer.


Afgørelser uden problemer (kaldes i en cmd.exe session):


C:UsersTC estInstall> install.bat ...installTarget


C:UsersTC estInstall> install.bat C:UsersTCinstallTarget


Udførelse med problemer (kaldes i en cmd.exe session):
C:UsersTC estInstall> install.bat D:DocumentsinstallTarget


Problemerne opstår, når jeg prøver at kopiere filer specielt, men også at lave og fjerne mapper.


Jeg håber, at nogen kan fortælle mig hvilke muligheder jeg skal bruge for at løse problemerne.


Hilsen!

Bedste reference


Nå, jeg har to fejl, jeg har rettet, og så fungerer scriptet korrekt.


Den første var, at jeg ikke brugte indstillingen/d i cd-kommandoen for at ændre også drivenheden. Det betyder, at C:UsersTC> cd D:Documents er forkert, den korrekte kommando er følgende: C:UsersTC> cd /d D:Documents som MS-DOS manuel side angiver.


Den anden fejl, det var ikke en fejl, jeg sætter rm -rf \%INSTALL\_DIR\% (som i Linux) i stedet for den korrekte Windows-kommando rd /s/q \%INSTALL\_DIR\%


Nu er alle problemerne blevet løst, og scriptet fungerer korrekt :)

Andre referencer 1


Det har at gøre med batch-filer, der ikke har adgang til andre drev end C: \ -drevet som standard. Selvom du åbner din kommandolinje, bør du ikke kunne CD D:. Prøv dette (ikke sikker på om dette vil fungere som jeg aldrig har prøvet det)


PUSHD D:
C:UsersTC	estInstall> install.bat D:DocumentsinstallTarget


Ellers skal du bruge PUSHD D: og derefter flytte installationsfilen til D: \ midlertidigt og installere. Kun løsninger, jeg kan tænke på.