Premièrement, j'ai vu ce sujet mais je ne pouvais pas comprendre cela.
Question:
Il y a un fichier batch D:\path\to\file.bat
avec le contenu suivant:
echo %cd%
pause
La sortie est:
C:\
Ce doit être D:\path\to
Qu'est-ce que je fais mal?
windows
batch-file
working-directory
Hamed Kamrava
la source
la source
Réponses:
La variable en lecture seule du système
%CD%
conserve le chemin de l'appelant du lot, pas l'emplacement du fichier de lot.Vous pouvez obtenir le nom du script batch lui-même tel que tapé par l'utilisateur avec
%0
(par exemplescripts\mybatch.bat
). Des extensions de paramètres peuvent être appliquées à cela, donc%~dp0
retourneront le lecteur et le chemin d'accès au script batch (par exempleW:\scripts\
) et%~f0
renverront le chemin complet (par exempleW:\scripts\mybatch.cmd
).Vous pouvez faire référence à d'autres fichiers dans le même dossier que le script batch en utilisant cette syntaxe:
Cela peut même être utilisé dans un sous-programme,
Echo %0
donnera l'étiquette d'appel mais,echo "%~nx0"
vous donnera le nom de fichier du script batch.Quand le
%0
variable est développée, le résultat est placé entre guillemets.Plus d'informations sur les paramètres de lot .
la source
stm.sql
dansD:\Dir1\Dir2\stm.sql
. J'ai besoinmysql.exe -u root -p mysql < %cd%\stm.sql
d'exécuter ces commandes stm.sql.*.bat
ou*.sh
?D:\Dir1\Dir2\batchfile.bat
etD:\Dir1\Dir2\stm.sql
. le contenu de batchfile.bat est:mysql.exe -u root -p mysql < D:\Dir1\Dir2\stm.sql
et le contenu stm.sql est quelques commandes MySQL.echo %~dp0
retournera le chemin vers l'emplacement du lot.echo %~f0
renverra le chemin vers le lot avec le nom de fichier.Très simple:
la source
cd /d %~dp0
la première ligne du fichier de commandes etDans votre fichier .bat:
Vous pouvez maintenant utiliser la variable
%mypath%
pour référencer le chemin d'accès au.bat
fichier. Pour vérifier que le chemin est correct:Par exemple, un fichier appelé
DIR.bat
avec le contenu suivantexécuté à partir du répertoire
g:\test\bat
fera écho à ce chemin dans la fenêtre de commande DOS.la source
Voici ce que j'utilise en haut de tous mes fichiers batch. Je viens de copier / coller à partir de mon dossier de modèles.
La définition du chemin du fichier de commandes en cours sur% batdir% vous permet de l'appeler dans les commandes suivantes du fichier de commandes en cours, quel que soit l'endroit où ce fichier de commandes passe. L'utilisation de PUSHD vous permet d'utiliser POPD pour définir rapidement le chemin d'accès de ce fichier de commandes à% batdir% d'origine. N'oubliez pas que si vous utilisez% batdir% ExtraDir ou% batdir% \ ExtraDir (selon la version utilisée ci-dessus, en mettant fin ou non à la barre oblique inverse), vous devrez mettre la chaîne entière entre guillemets si le chemin a des espaces (c'est-à-dire "% batdir% ExtraDir" ). Vous pouvez toujours utiliser PUSHD% ~ dp0. [https: // ss64.com/ nt / syntax-args .html] contient plus de paramètres (% ~).
Notez que l'utilisation de (: :) au début d'une ligne en fait une ligne de commentaire. Plus important encore, l'utilisation de :: vous permet d'inclure des redirecteurs, des canaux, des caractères spéciaux (c'est-à-dire <> | etc) dans ce commentaire.
Bien sûr, Powershell fait cela et bien plus encore.
la source
set batdir=%CD%
). Ce n'est pas correct, car c'est le chemin d'accès à l'appelant, pas le fichier bat lui-même. La seule façon valide d'obtenir le chemin d'accès au fichier bat en cours d'exécution est%~dp0
.