2 votes

Rester dans le répertoire de travail actuel dans le fichier BATCH

J'ai un répertoire racine à partir duquel j'exécute le fichier batch principal, qui appelle un autre fichier batch (2ème fichier batch) présent dans le sous-répertoire du répertoire racine.

Après l'exécution du 2ème fichier batch, je voudrais rester dans le répertoire racine :

@echo off 
set root_dir=C:\Users\milan\Desktop 

cd "%root_dir%\2nd_dir"
call 2nd_batch.bat

echo %cd%

La dernière commande echo devrait me montrer le patch du répertoire racine. J'ai essayé de faire ceci

cd "\%root_dir%\2nd_dir\"

Mais ça n'a pas marché.

3voto

LPChip Points 53736

Le problème que vous rencontrez est lié au fonctionnement de l'instruction d'appel.

Lorsque vous utilisez l'instruction call dans un fichier batch, elle inclut ce fichier batch dans le script courant et exécute son code. Cela signifie que tous les changements que le nouveau script apporte à votre environnement sont reportés dans le fichier batch précédent, comme vous l'avez remarqué.

Vous pouvez utiliser la commande start au lieu de la commande call pour lancer le nouveau fichier batch dans un nouveau processus, sans reporter les modifications apportées au fichier batch précédent.

Alternativement, vous pouvez stocker le dossier actuel avant d'exécuter le nouveau script et y revenir après que le script soit terminé.

Vous trouverez ci-dessous deux exemples. La ligne : : est une remarque. Vous pouvez la copier dans votre script ou l'omettre si vous le souhaitez.

:: example that uses start
cd "%root_dir%\2nd_dir"
start 2nd_batch.bat

echo %cd%

:: example that stores and sets the path

:: store current folder for retrieval
set masterfolder=%cd%
cd "%root_dir%\2nd_dir"
call 2nd_batch.bat

:: restore folder
cd /d %masterfolder%

echo %cd%

2voto

Alexey Ten Points 121

Utilice setlocal pour sauvegarder les paramètres actuels (lecteur actuel, dossier, environ, ...), et endlocal pour les restaurer.

[test1.bat]

@echo off
setlocal
echo test1-1 : %cd%
call test2.bat
echo test1-2 : %cd%
endlocal
echo test1-3 : %cd%

[test2.bat]

echo test2-1 : %cd%
cd \
echo test2-2: %cd%

enter image description here

PS. setlocal/endlocal peuvent être imbriqués.

0voto

T3RR0R Points 417

Ouvrez cmd.exe et faites les requêtes suivantes.

PUSHD/?
POPD/?

Problème résolu.

Beaucoup de réponses peuvent être trouvées en faisant des recherches sur les commandes Listées lorsque vous utilisez l'aide /? requête.

PUSHD vous permet de changer de répertoire d'une manière similaire à celle du CD, donc :

PUSHD "DirectoryPath"

Cependant, PUSHD enregistre le répertoire précédent pour que POPD puisse le rappeler.

Ainsi, dans la situation que vous avez décrite, vous PUSHD vers le répertoire utilisé par ou nécessaire pour votre autre fichier batch, puis lorsque vous avez besoin de revenir au répertoire précédent, utilisez simplement

POPD

Et voilá, vous y êtes.

Pour résoudre ce problème, utilisez PUSHD / POPD :

Dans votre fichier batch principal :

PUSHD "PathFor2ndBatch"
call 2nd_batch.bat
POPD
echo %cd%

Si l'objectif est de faire en sorte que le second fichier batch s'exécute dans le répertoire de votre fichier batch principal :

PUSHD "PathFor2ndBatch"
CALL 2nd_Batch.bat

Au début de votre 2ème lot :

POPD

0voto

GChuf Points 761

Vous pouvez également lancer votre fichier batch avec le commutateur /D :

start /?
START [/D path]
path        Starting directory

Ainsi, l'exécution du code ci-dessous fera en sorte que le fichier batch s'exécute à l'intérieur C:\users répertoire.

start /D C:\users C:\Windows\System32\RCWM\rmdir.bat

Bien que, comme Akina l'a mentionné dans les commentaires, start /w est plus courte à cet effet.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X