Rechercher et renommer des fichiers sans extension?
-
06-07-2019 - |
Question
Donc, j'ai un tas de fichiers sans extension. Je veux écrire un script batch Windows qui:
- Rechercher des fichiers sans extension (dans un dossier spécifié)
- Ajoutez .bla à la fin du nom de fichier
Je suis un script de commandes batch Windows, je ne sais même pas par où commencer. Suggestions?
La solution
Pour les fichiers de commandes Windows, seuls les fichiers sans extension portant l'extension .bla seront renommés:
rename *. *.bla
Notez que le premier argument est une étoile et un point: *.
Le deuxième argument est: * .bla
La combinaison de points de départ (*.) représente des fichiers sans extension dans ce contexte.
Avant:
06/21/2009 11:57 PM 6 test
06/21/2009 11:57 PM 7 test.exe
06/21/2009 11:57 PM 7 test2
Après:
06/21/2009 11:57 PM 6 test.bla
06/21/2009 11:57 PM 7 test.exe
06/21/2009 11:57 PM 7 test2.bla
Remarque supplémentaire: la ligne de commande ci-contre renomme tous les fichiers .bla en fichiers d’extension.
MODIFIER :
Pour renommer de manière récursive des fichiers sans extension entre sous-répertoires (ne prend pas en charge les espaces dans les chemins):
@echo off
FOR /F %%i in ('dir /b/s/A-d') DO (
if "%%~xi" == "" rename "%%~fi" "%%~ni.bla"
)
EDIT2:
Pour renommer de manière récursive des fichiers sans extension entre sous-répertoires (prend en charge les espaces dans le chemin):
@echo off
for /f "tokens=* delims= " %%i in ('dir /b/s/A-d') DO (
if "%%~xi" == "" rename "%%~fi" "%%~ni.bla"
)
Autres conseils
Voici une autre commande possible pour renommer des fichiers sans extension de manière récursive (en supposant que les chemins de fichiers ne contiennent pas d'espaces ):
for /f %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla"
Version par lots (avec %
doublé):
@echo off
for /f %%i in ('dir *. /b /s /a-d') do (
rename "%%~fi" "%%~ni.bla"
)
Si les noms de fichiers ou de dossiers contiennent des espaces , utilisez plutôt cette commande:
for /f "tokens=* delims= " %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla"
Version du lot:
@echo off
for /f "tokens=* delims= " %%i in ('dir *. /b /s /a-d') do (
rename "%%~fi" "%%~ni.bla"
)
Modifier: voici une ligne encore plus courte qui prend en charge les espaces dans les chemins:
for /r %i in (*.) do ren "%~fi" "%~ni.bla"
Version du lot:
@for /r %%i in (*.) do ren "%%~fi" "%%~ni.bla"
pour faire cela dans les sous-répertoires, utilisez ceci:
for /f %a in ('dir /b /ad /s') do rename %a\*. *.bla
si vous utilisez ceci dans un fichier de commandes, vous devez doubler le '%'
for /f %%a in ('dir /b /ad /s') do rename %%a\*. *.bla
modifier:
et si vous avez des espaces dans les noms de répertoires, vous pouvez essayer ceci (version par lots):
for /f "tokens=* delims= " %%a in ('dir /b /ad /s') do rename "%%a\*." "*.bla"