web-dev-qa-db-fra.com

Obtenir le nom du fichier en lot pour la boucle

J'ai la boucle suivante dans un fichier batch:

for /R c:\test\src %%i IN (*.*) DO (
MOVE %%i C:\test\destination
ECHO %%i
exit
)

Le résultat de ECHO génère le chemin d'accès complet au fichier. Ex: C:\Nom de dossier\Nom de fichier Je n'ai besoin que d'ECHO pour le Nom de fichier . Existe-t-il une commande spécifique qui me donnerait le nom de fichier? Merci !

39
Murtaza Mandvi

Lorsque les extensions de commande sont activées (Windows XP et plus récent, en gros), vous pouvez utiliser la syntaxe% ~ nF (où F est la variable et ~ n est la demande de son nom) pour obtenir uniquement le nom du fichier.

FOR /R C:\Directory %F in (*.*) do echo %~nF

devrait faire écho que les noms de fichiers.

74
AKX

ou Juste% ~ F vous donnera le chemin complet et le nom complet du fichier.

Par exemple, si vous souhaitez enregistrer tous les fichiers * .ax dans le répertoire en cours, procédez comme suit:.

FOR /R C:. %F in (*.ax) do regsvr32 "%~F"

Cela fonctionne assez bien dans Win7 (64bit) :-)

4
Chris

Je suis un peu en retard mais j'ai utilisé ceci:

dir /B *.* > dir_file.txt

vous pouvez ensuite créer une simple boucle FOR pour extraire le nom de fichier et l’utiliser. par exemple:

for /f "tokens=* delims= " %%a in (dir_file.txt) do (
gawk -f awk_script_file.awk %%a
)

ou les stocker dans Vars (! N1 !,! N2! ..! Nn!) pour une utilisation ultérieure. par exemple:

set /a N=0
for /f "tokens=* delims= " %%a in (dir_file.txt) do (
set /a N+=1
set v[!N!]=%%a
)
3
Guy Soffer

Si vous souhaitez conserver le nom de fichier (uniquement) et l'extension, vous pouvez utiliser %~nxF

0
Gophern Kwok