Dans les fichiers batch, tout comme dans les programmes C standard, l'argument 0 contient le chemin du script en cours d'exécution. Vous pouvez utiliser %~dp0
pour obtenir uniquement la partie du chemin de l'argument 0 (qui est le script actuel) - ce chemin est toujours un chemin entièrement qualifié.
Vous pouvez également obtenir le chemin entièrement qualifié de votre premier argument en utilisant %~f1
, mais cela donne un chemin selon le répertoire de travail actuel, ce qui n'est évidemment pas ce que vous voulez.
Personnellement, j'utilise souvent l'idiome %~dp0%~1
dans mon fichier batch, qui interprète le premier argument par rapport au chemin du batch en cours d'exécution. Cela a cependant un inconvénient : il échoue misérablement si le premier argument est entièrement qualifié.
Si vous devez prendre en charge à la fois les chemins relatifs et absolus, vous pouvez utiliser la solution de Frédéric Ménez : changer temporairement le répertoire de travail actuel.
Voici un exemple qui démontrera chacune de ces techniques :
@echo off
echo %%~dp0 is "%~dp0"
echo %%0 is "%0"
echo %%~dpnx0 is "%~dpnx0"
echo %%~f1 is "%~f1"
echo %%~dp0%%~1 is "%~dp0%~1"
rem Changer temporairement le répertoire de travail actuel, pour récupérer un chemin complet vers le premier paramètre
pushd .
cd %~dp0
echo batch-relative %%~f1 is "%~f1"
popd
Si vous enregistrez ceci en tant que c:\temp\example.bat et l'exécutez depuis c:\Users\Public comme
c:\Users\Public>\temp\example.bat ..\windows
...vous observerez la sortie suivante :
%~dp0 is "C:\temp\"
%0 is "\temp\example.bat"
%~dpnx0 is "C:\temp\example.bat"
%~f1 is "C:\Users\windows"
%~dp0%~1 is "C:\temp\..\windows"
batch-relative %~f1 is "C:\Windows"
La documentation pour l'ensemble des modificateurs autorisés sur un argument de batch peut être trouvée ici : https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/call
1 votes
Les chemins relatifs ne sont pas la fin de l'histoire. Considérez également les liens symboliques NTFS : il est fort probable que vous ayez également besoin d'un analogue de
realpath
pour une normalisation fiable des chemins.0 votes
Probablement, vous n'avez pas besoin d'un chemin exact du tout ! Vous pouvez simplement ajouter un chemin de base:
SET FilePath=%CD%\%1
afin que cela ressemble àC:\Foo\Bar\..\..\some\other\dir\file.txt
. Les programmes semblent comprendre un tel chemin compliqué.0 votes
Beaucoup de ces réponses sont trop compliquées ou tout simplement boguées - mais, c'est en fait quelque chose de assez facile à faire en lot, jetez un coup d'œil à ma réponse ci-dessous.