
Soy muy nuevo en secuencias de comandos por lotes.
Hay soluciones al respecto paralinux y macos, pero lo necesito para windows.
Tengo lo siguiente, que solo funciona con caracteres especiales! @#$%^&*~ etc. básicamente los que puedes ver en tu teclado. Pero necesito eliminar caracteres especiales como  y °. Los siguientes scripts no funcionan con esos dos personajes específicos., un script que puedo ejecutar mediante cmd. Hayestepero no es compatible con Windows 7 cmd.
@echo off &setlocal
cd /d c:\users\data
for /f "delims=" %%a in ('dir /b /a-d *#*.txt') do (
set "fname=%%~a"
setlocal enabledelayedexpansion
set "nname=!fname:#=!"
ren "!fname!" "!nname!"
endlocal
)
Y lo siguiente que puede eliminar espacios solo en los nombres de archivos
@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
)
)
Respuesta1
Su primer script funcionó para mí si tiene en cuenta el hecho de que se debe utilizar la página de códigos 437 para su script.
Pegue el siguiente script en el Bloc de notas. Guárdelo como test.bat con codificación ANSI.
@echo off &setlocal
cd /d c:\users\data
for /f "delims=" %%a in ('dir /b /a-d *ø*.txt') do (
set "fname=%%~a"
setlocal enabledelayedexpansion
set "nname=!fname:ø=!"
ren "!fname!" "!nname!"
endlocal
)
El script anterior cambiará de nombre degree°.txt
a degree.txt
.
ø se utiliza porque es Unicode U+00F8
. El símbolo de grado está 0xF8
en la página de códigos 437.
No aparece en la página de códigos 437, por lo que no conozco una solución paralela. Probablemente sea necesariocambie la página de códigos como se indica en esta respuestapara hacerlo correctamente. Aquí hay un intento de crear un archivo por lotes que incluye cambiar la página de códigos.
echo Ignore the error displayed below
@echo off &setlocal
chcp 65001>nul
cd /d c:\users\data
for /f "delims=" %%a in ('dir /b /a-d *Â*.txt') do (
set "fname=%%~a"
setlocal enabledelayedexpansion
set "nname=!fname:Â=!"
ren "!fname!" "!nname!"
endlocal
)
Pegue lo anterior en un archivo de Bloc de notas y guárdelo con codificación UTF-8. Es necesario incluir la primera línea del script porque el archivo por lotes dará un error al procesar inicialmente el archivo UTF-8.
Respuesta2
Ojalá pudiera atribuirme el mérito de esto, pero fue algo con lo que me topé. No puedo encontrar la publicación en la que lo encontré, así que esto es de memoria.
find . -depth -name "*" -print0 | $var -0 sed -i 's/[:cntrl:]/_/g' *
Quizás tengas que jugar un poco con eso, solo me estoy tomando un par de minutos de un proyecto mío para publicar esto. Comparte tus resultados por favor.