web-dev-qa-db-fra.com

Obtenir le répertoire de fichier de lot actuel

Tout d’abord, j’ai vu ce sujet mais je n’ai pas compris.

Question:

Il y a un fichier de commandes dans D:\path\to\file.bat avec le contenu suivant:

echo %cd%
pause

La sortie est:

C:\

Il doit s'agir de D:\path\to

Qu'est-ce que je fais mal?

234
Hamed Kamrava

La variable système en lecture seule %CD% conserve le chemin de l'appelant du lot, pas l'emplacement du fichier de lot.

Vous pouvez obtenir le nom du script de traitement par lot tel que saisi par l'utilisateur avec %0 (par exemple scripts\mybatch.bat). Les extensions de paramètre peuvent être appliquées à cela. %~dp0 renverra le lecteur et le chemin d'accès au script de traitement par lots (par exemple W:\scripts\) et %~f0 renverra le chemin complet (par exemple W:\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:

CALL %0\..\SecondBatch.cmd

Ceci peut même être utilisé dans un sous-programme, Echo %0 donnera le libellé de l'appel mais echo "%~nx0" vous donnera le nom du fichier du script batch.

Lorsque la variable %0 est développée, le résultat est placé entre guillemets.

Plus sur les paramètres de lot .

440
Stoleg

Très simple:

setlocal
cd /d %~dp0
File.exe
105
shay

Dans votre fichier .bat:

set mypath=%cd%

Vous pouvez maintenant utiliser la variable %mypath% pour référencer le chemin d'accès au fichier .bat. Pour vérifier que le chemin est correct:

@echo %mypath%

Par exemple, un fichier appelé DIR.bat avec le contenu suivant

set mypath=%cd%
@echo %mypath%
Pause

exécuter à partir du répertoire g:\test\bat fera écho ce chemin dans la fenêtre de commande DOS.

23
rockerron

Voici ce que j'utilise en haut de tous mes fichiers de commandes. Je viens de copier/coller de mon dossier de modèles.

@echo off
:: --HAS ENDING BACKSLASH
set batdir=%~dp0
:: --MISSING ENDING BACKSLASH
:: set batdir=%CD%
pushd "%batdir%"

Définir le chemin d'accès du fichier de commandes en cours sur% batdir% vous permet de l'appeler dans des domaines ultérieurs du fichier de commandes en cours, quel que soit le mode de modification de ce fichier. L'utilisation de PUSHD vous permet d'utiliser POPD pour définir rapidement le chemin d'accès de ce fichier de commandes sur% batdir% d'origine. N'oubliez pas que si vous utilisez% batdir% ExtraDir ou% batdir%\ExtraDir (selon la version utilisée ci-dessus, terminez ou supprimez la barre oblique inverse), vous devrez entourer la chaîne entière de guillemets doubles si path contient des espaces (par exemple, "% batdir% ExtraDir" ). Vous pouvez toujours utiliser PUSHD% ~ dp0. [https: // ss64.com/ nt/syntax-args .html] contient davantage de paramètres (% ~).

Notez que l'utilisation de (: :) au début d'une ligne en fait une ligne de commentaire. Plus important encore, utiliser :: vous permet d’inclure des redirecteurs, des pipes, des caractères spéciaux (<> | etc) dans ce commentaire.

:: ORIG STMT WAS: dir *.* | find /v "1917" > outfile.txt

Bien sûr, Powershell le fait et bien d’autres.

1
Wendell Holmes