Comment supprimer des espaces dans les noms de fichiers (en vrac)

comment supprimer des espaces (ne pas remplacer par des underscores) à partir de plusieurs milliers de fichiers en vrac dans Windows? Puis-je le faire depuis la commande DOS?

Actuellement:

file one.mp3
file two.mp3

Tous les fichiers doivent devenir:

fileone.mp3
filetwo.mp3
17
demandé sur Sнаđошƒаӽ 2012-06-30 04:22:20

5 réponses

voici un script qui peut facilement renommer des fichiers en vrac, en enlevant tous les espaces du nom.

:renameNoSpace  [/R]  [FolderPath]
@echo off
setlocal disableDelayedExpansion
if /i "%~1"=="/R" (
  set "forOption=%~1 %2"
  set "inPath="
) else (
  set "forOption="
  if "%~1" neq "" (set "inPath=%~1\") else set "inPath="
)
for %forOption% %%F in ("%inPath%* *") do (
  if /i "%~f0" neq "%%~fF" (
    set "folder=%%~dpF"
    set "file=%%~nxF"
    setlocal enableDelayedExpansion
    echo ren "!folder!!file!" "!file: =!"
    ren "!folder!!file!" "!file: =!"
    endlocal
  )
)

supposons que le script s'appelle renameNoSpace.chauve-souris

renameNoSpace: (pas d'arguments) renommer les fichiers dans le répertoire courant

renameNoSpace /R: renommer les fichiers dans l'arborescence des dossiers enracinés dans le répertoire courant

renameNoSpace myFolder: renommer les fichiers du répertoire" myFolder " qui se trouve dans le répertoire courant.

renameNoSpace "c:\my folder\" : Renommer les fichiers dans le chemin spécifié. Les guillemets sont utilisés parce que le chemin contient un espace.

renameNoSpace /R c:\: renommer tous les fichiers sur le lecteur C:.

62
répondu dbenham 2016-05-13 20:48:37

Créer une powershell fichier - *.ps1 extension

ecrire ce code:

dir |
Where-Object { $_.name.Contains(" ") } |
Rename-Item -NewName { $_.name -replace " ","" }

enregistrer, puis clic droit -> exécuter avec powershell

8
répondu bogudoby 2014-04-07 13:19:43
@echo off
setlocal enableextensions enabledelayedexpansion

for %%f in (*.*) do (
set ARG=%%~nxf
rename "%%f" !ARG: =!
)
4
répondu pathe3 2013-02-23 02:14:17

Vous pouvez écrire un script simple qui fait cela pour un fichier/répertoire, par exemple:

@echo off
setlocal enableextensions enabledelayedexpansion

set "ARG=%~1"
ren "%ARG%" "%ARG: =%"

...et puis, si vous le souhaitez, l'exécuter sur tous les fichiers et/ou répertoires que vous vous souciez. Par exemple, si vous créez le script ci-dessus comme myrenamingscript.cmd, vous pouvez l'exécuter sur tous les fichiers non-dir dans le dir actuel en exécutant:

for %f in (*) do @myrenamingscript.cmd "%~f"
3
répondu reuben 2012-06-30 00:29:14

Le problème que j'ai rencontré est qu'il y a une possibilité qu'il existe déjà un fichier avec le nom que vous essayez de donner à nouveau fichier (par exemple, si il y a 2 fichiers dans le dossier nommé "fichier un.txt " et " file_one.txt" lorsque vous essayez de remplacer les espaces par des underscores, un fichier remplace l'autre). Donc j'ai fait ce script qui vérifie si le nouveau nom existe déjà et si oui place un numéro à la fin du nom du fichier (ajoute 1 au numéro jusqu'à ce qu'il n'y ait aucun autre fichier avec ce nom). Les Instructions sur ce qu'il faut changer se trouvent en haut (lignes à recommander). Ne pas stocker le fichier de commandes dans le même dossier que vous avez les fichiers à renommer si vous utilisez *.* option. J'espère que cette aide.

@echo off

REM Instructions
REM This script repaces spaces from file names with underscores. 
REM If you want to just remove the spaces uncomment lines 30 and 52 and comment out the lines 29 and 51. 
REM set the following parameters. 
REM pb is the folder containing the files we want to rename (fullpath)
REM tm is a temporary folder that will be created and deleted. Just put a folder that does not exist and is not used by anything else (fullpath).
REM all is the file type you want to raname. E.g. *.* for every file, *.txt for TXTs, *.pdf for PDFs etc 
REM you don't have to change anything else

set pb=<folder containing the files to rename>
set tm=<a temp folder that does not exist>
set all=*.*

set pa=%pb%%all%

setlocal EnableDelayedExpansion

cd /d %pa%

set /a count=1

if not exist %tm% mkdir %tm%

for /f %%F in (%pa%) do (

    set name=%%~nF
    set name2=!name: =_!
    REM set name2=!name: =!
    set name3=!name2!%%~xF

    if !name2! == %%~nF ( 
        move /y %%~dpF\!name3! %tm%\ >nul
    ) else (
            if not exist %%~dpF\!name3! ( 
                if not exist %tm%\!name3! (
                    ren "%%F" "!name3!" 
                    move /y %%~dpF\!name3! %tm%\ >nul
                )
        )   
    ) 

)

:rename

for /f %%F in (%pa%) do (

    set name=%%~nF
    set name2=!name: =_!
    REM set name2=!name: =!
    set name4=!name2!%count%
    set name3=!name4!%%~xF

    if !name2! == %%~nF ( 
        move /y %%~dpF\!name3! %tm%\ >nul
    ) else (
            if not exist %%~dpF\!name3! ( 
                if not exist %tm%\!name3! (
                    ren "%%F" "!name3!" 
                    move /y %%~dpF\!name3! %tm%\ >nul
                )
        )   
    ) 

)

set /a count = %count% + 1

set /a loop = 0

for %%F in (%pa%) do (set /a loop = 1)

if %loop% equ 1 goto rename

move /y %tm%\%all% %pb% >nul

rmdir /s /q %tm%
0
répondu Mike_Gre 2017-06-14 07:51:03