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