Eh bien, pour obtenir le nom de fichier de votre lot, le plus simple serait d'utiliser %~n0
.
@echo %~n0
Affichera le nom (sans l'extension) du fichier de commandes en cours d'exécution (sauf exécuté dans un sous-programme appelé par call
). La liste complète de ces substitutions « spéciales » pour les noms de chemin peut être trouvé avec help for
, à la fin de l'aide:
En outre, la substitution des références POUR variables a été amélioré. Vous pouvez maintenant utiliser l'option syntaxe suivante:
%~I - expands %I removing any surrounding quotes (")
%~fI - expands %I to a fully qualified path name
%~dI - expands %I to a drive letter only
%~pI - expands %I to a path only
%~nI - expands %I to a file name only
%~xI - expands %I to a file extension only
%~sI - expanded path contains short names only
%~aI - expands %I to file attributes of file
%~tI - expands %I to date/time of file
%~zI - expands %I to size of file
%~$PATH:I - searches the directories listed in the PATH
environment variable and expands %I to the
fully qualified name of the first one found.
If the environment variable name is not
defined or the file is not found by the
search, then this modifier expands to the
empty string
Les modificateurs peuvent être combinés pour obtenir résultats composés:
%~dpI - expands %I to a drive letter and path only
%~nxI - expands %I to a file name and extension only
%~fsI - expands %I to a full path name with short names only
Pour répondre précisément à votre question, cependant: Les sous-chaînes sont faites à l'aide la notation :~start,length
:
%var:~10,5%
va extraire 5 caractères de la position 10 dans la variable d'environnement %var%
.
NOTE: L'indice des chaînes est basée zéro, le premier caractère est à la position 0, la seconde à 1, etc.
Pour obtenir des sous-chaînes de variables d'arguments tels que %0
, %1
, etc. . vous devez les assigner à une variable d'environnement normal à l'aide set
premier:
:: Does not work:
@echo %1:~10,5
:: Assign argument to local variable first:
set var=%1
@echo %var:~10,5%
La syntaxe est encore plus puissant:
%var:~-7%
extrait les 7 derniers caractères de %var%
%var:~0,-4%
va extraire tous les caractères sauf les quatre derniers qui aussi vous débarrasser de l'extension du fichier (en supposant trois caractères après la période [.
]).
Voir help set
pour plus de détails sur cette syntaxe.
Voilà une excellente réponse. Merci beaucoup. – JosephStyons
Eh bien, ce sont maintenant trois réponses roulées en un ou deux, grâce à Patrick :) – Joey
L'extraction de sous-chaîne ne fonctionne pas avec les variables de boucle FOR, donc vous devrez faire comme suit (\ r \ n dans la ligne moyenne du code interruptions car SO ne semble pas autoriser les sauts de ligne dans les commentaires): 'setlocal ENABLEDELAYEDEXPANSION \ r \ n pour/f %% s dans ('set') do ( \t set tmp = %% s \ r \ n \t echo! Tmp: ~ -3! \ R \ n ) ' – Fr0sT