Problèmes de travail avec différentes unités de disque dans un fichier de commandes

Ceci est mon premier fichier batch, et aussi ma première fois en langage batch (j’utilise généralement UNIX et je ne connais pas beaucoup les commandes Windows).

Je crée un fichier batch appelé install.bat qui fait tout le travail pour installer une application Java à partir de fichiers source. Voici un instantané de la section d’installation:

 @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 

REMARQUE: Les commandes javac et jar sont correctes, au moins fonctionnent dans ma machine.

Eh bien, le script fonctionne correctement lorsque je le teste avec le INSTALL_DIR appartenant au même lecteur sur lequel je l’exécute, mais si j’utilise un répertoire cible du lecteur sur lequel je m’exécute, j’ai des problèmes.

Exécutions sans problèmes (appelées dans une session cmd.exe):

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

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

Exécution avec des problèmes (appelée dans une session cmd.exe): C:\Users\TC\testInstall> install.bat D:\Documents\installTarget

Les problèmes surviennent lorsque j’essaie de copier des fichiers spécialement, mais aussi de créer et de supprimer des répertoires.

J’espère que quelqu’un pourra me dire quelles options je dois utiliser pour résoudre les problèmes.

Cordialement!

Eh bien, j’ai deux erreurs que j’ai corrigées, puis le script fonctionne correctement.

La première était que je n’avais pas utilisé l’option / d dans la commande cd afin de changer également l’unité de disque. Cela signifie que C:Users\TC> cd D:\Documents est incorrect, la commande correcte est la suivante: C:Users\TC> cd /d D:\Documents ainsi que la page de manuel MS-DOS indique.

La seconde erreur, ce n’était pas réellement une erreur, j’ai mis rm -rf %INSTALL_DIR% (comme sous Linux) au lieu de la commande Windows correcte rd /s/q %INSTALL_DIR%

Maintenant, tous les problèmes ont été corrigés et le script fonctionne correctement 🙂

Cela concerne les fichiers batch qui n’accèdent pas aux autres lecteurs que le lecteur C: \ par défaut. Même si vous ouvrez votre ligne de commande, vous ne devriez pas pouvoir CD D:\ . Essayez ceci (ne savez pas si cela fonctionnera comme je ne l’ai jamais essayé)

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

Ou bien, utilisez PUSHD D:\ puis déplacez le fichier d’installation vers D: \ temporairement et installez-le. Seules les solutions que je peux penser.