varios usando renombrar parte para nombres nombre masivamente espacios eliminar conjunto comando cambiar blanco bat archivos windows batch-file renaming

windows - usando - Cómo eliminar espacios de los nombres de archivo(a granel)



renombrar archivos masivamente bat (5)

Aquí hay una secuencia de comandos que puede renombrar de forma masiva los archivos, quitando todos los espacios del nombre.

: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 ) )

Supongamos que el script se llama renameNoSpace.bat

renameNoSpace : (sin argumentos) Renombra archivos en el directorio actual

renameNoSpace /R : renameNoSpace /R nombre de los archivos en el árbol de la carpeta rooteado en el directorio actual

renameNoSpace myFolder : renameNoSpace myFolder nombre de los archivos en el directorio "myFolder" que se encuentra en el directorio actual.

renameNoSpace "c:/my folder/" : cambia el nombre de los archivos en la ruta especificada. Las citas se utilizan porque la ruta contiene un espacio.

renameNoSpace /R c:/ : Cambia el nombre de todos los archivos en la unidad C :.

¿Cómo eliminar espacios (no reemplazar con guiones bajos) de varios miles de archivos a granel en Windows? ¿Puedo hacer esto desde el comando DOS?

Actualmente:

file one.mp3 file two.mp3

Todos los archivos deben convertirse en:

fileone.mp3 filetwo.mp3


Crear un archivo powershell - extensión *.ps1

Escribe este código:

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

guardar, luego clic derecho -> ejecutar con powershell


El problema al que me he enfrentado es que existe la posibilidad de que ya haya un archivo con el nombre que intentas darle al nuevo archivo (por ejemplo, si hay dos archivos en la carpeta llamados "archivo one.txt" y "file_one.txt"). "cuando intenta reemplazar los espacios con guiones bajos, un archivo reemplazará al otro). Así que hice esta secuencia de comandos que verifica si el nuevo nombre ya existe y, de ser así, coloca un número al final del nombre del archivo (agrega 1 al número hasta que no haya otro archivo con ese nombre). Las instrucciones sobre qué cambiar están en la parte superior (líneas recomendadas). No almacene el archivo por lotes en la misma carpeta que tiene los archivos a cambiar de nombre si usa la opción *. *. Espero que esto ayude.

@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%


Puede escribir un script simple que hace esto para un archivo / directorio, por ejemplo:

@echo off setlocal enableextensions enabledelayedexpansion set "ARG=%~1" ren "%ARG%" "%ARG: =%"

... y luego, si lo desea, ejecútelo en todos los archivos y / o directorios que le interesan. Por ejemplo, si crea el script anterior como myrenamingscript.cmd, puede ejecutarlo sobre todos los archivos que no sean dir en el directorio actual ejecutando:

for %f in (*) do @myrenamingscript.cmd "%~f"


@echo off setlocal enableextensions enabledelayedexpansion for %%f in (*.*) do ( set ARG=%%~nxf rename "%%f" !ARG: =! )