web-dev-qa-db-fra.com

Comment remplacer tous les espaces par des traits de soulignement dans tous les noms de fichiers d'un dossier?

J'essaie de renommer tous les fichiers d'un dossier (tous les fichiers .exe). Je souhaite remplacer tous les espaces par des traits de soulignement, par exemple. qwe qwe qwe asd.exe à qwe_qwe_qwe_asd.exe.

Je dois le faire en utilisant la ligne de commande. J'ai essayé beaucoup de solutions possibles trouvées sur Internet et même sur ce site, mais je ne peux pas le faire fonctionner.

Je dois aussi le faire en "une seule ligne"/"une commande", mais j'accepterai toutes les réponses valables.

27
Matias Elorriaga

Une ligne

cmd /e:on /v:on /c "for %f in ("* *.exe") do (set "n=%~nxf" & set "n=!n: =_!" & ren "%~ff" "!n!" )"

Créez une instance cmd, avec les extensions et l'expansion retardée activées, et pour chaque fichier exe avec des espaces dans le nom, remplacez les espaces par des traits de soulignement et renommez le fichier avec le nouveau nom.

43
MC ND

Adapté d'ici:

https://stackoverflow.com/a/16129486/2000557

@echo off
Setlocal enabledelayedexpansion

Set "Pattern= "
Set "Replace=_"

For %%a in (*.exe) Do (
    Set "File=%%~a"
    Ren "%%a" "!File:%Pattern%=%Replace%!"
)

Pause&Exit

Créez un fichier de commandes (*.bat) avec le contenu ci-dessus. Placez ce fichier de commandes dans le dossier avec tous les fichiers .exe et il remplacera les espaces par des traits de soulignement lors de son exécution. 

13
Gray

Simple comme:

set filename=qwe qwe qwe asd.exe
set filename=%filename: =_%
10
n8b

Utilisation de forfiles:

forfiles /m *.exe /C "cmd /e:on /v:on /c set \"Phile=@file\" & if @ISDIR==FALSE ren @file !Phile: =_!"

Ajoutez /s après forfiles pour recurse à travers les sous-dossiers.

6
Jimadine

Basé sur la réponse @Gray, je l'ai étendu pour remplacer les noms de fichiers de manière récursive dans tous les sous-répertoires.

Fichier 1: replace.bat

setlocal enabledelayedexpansion

set "pattern= "
set "replace=_"

for %%I in (*.ext) do (
    set "file=%%~I"
    ren "%%I" "!file:%pattern%=%replace%!"
)

Fichier 2: recursive.bat

for /d /r . %%D in (*) do (
    copy replace.bat "%%D\replace.bat"
    cd "%%D"
    replace.bat
    del replace.bat
    cd..
)

Des dossiers

  • replace.bat contient le script pour remplacer space par underscore
  • recursive.bat contient un script pour faire la récursion dans tous les sous-répertoires

Comment utiliser?

  • Enregistrez à la fois replace.bat et recursive.bat dans le même répertoire.
  • Remplacez .ext par l'extension de fichier souhaitée pour qu'elle corresponde (comme .mp4) dans replace.bat.
  • Double-cliquez (exécutez) UNIQUEMENT le fichier recursive.bat.
2
Hamza Rashid

Enregistrez les 2 commandes suivantes dans un fichier .bat. Il remplacera " " par "_" dans tous les fichiers et dossiers, de manière récursive, à partir du dossier où le fichier est stocké.

forfiles /s /m *.* /C "cmd /e:on /v:on /c set \"Phile=@file\" & if @ISDIR==FALSE ren @file !Phile: =_!"
forfiles /s /C "cmd /e:on /v:on /c set \"Phile=@file\" & if @ISDIR==TRUE ren @file !Phile: =_!"

Remarque: La première ligne le fait pour les fichiers et la deuxième pour les dossiers. Chaque ligne peut être utilisée séparément.

0
Alex

set data =% date: ~ 6,4 %% date: ~ 3,2 %% date: ~ 0,2% _% heure: ~ 0,2 %% heure: ~ 3,2 %% heure: ~ 6, 2% Données définies =% données: = 0%

0
ricarela