2013-05-19 2 views
0

У меня есть куча файлов, и я бы хотел удалить все символы, которые не находятся в алфавите. Поэтому, учитывая имя файла «Домашние шумы (f) .txt« Я хочу результат «Домашние шумы f.txt», командный файл находится в той же папке, и он не должен быть рекурсивным. Это то, что у меня есть до сих пор:удаление неалфавитных символов в имени файла

@echo ON 
SETLOCAL EnableDelayedExpansion 
For %%# in (*.*) do (
    Set MyVar=%%~n# 
    set MyVar=!MyVar:"-"= ! 
    REN "%%~n#" "!MyVar!" 
    set MyVar=!MyVar:"("= ! 
    REN "%%~n#" "!MyVar!" 
    set MyVar=!MyVar:")"= ! 
    REN "%%~n#" "!MyVar!" 
    echo %%~n#>>text.txt 
) 
Pause&Exit 
+0

пространства не является альфа - почему это сохранилось? как насчет чисел? – dbenham

+0

это будут символы, сохраненные «abcdefghijklmnopqrstuvwxyz 1234567890», но не «специальные» символы – user2313522

+0

Что относительно '.'? Что произойдет, если имя состоит только из «специальных» символов? Что должно произойти, если два имени рухнули на один, например «a & b», «a + b»? – dbenham

ответ

1
@echo off 
setlocal EnableDelayedExpansion 
set preserve=abcdefghijklmnopqrstuvwxyz 1234567890 
for %%a in (*.*) do (
    set "filename=%%~Na" 
    call :RemoveChars filename newFilename= 
    if "!newFilename!" neq "%%~Na" ren "%%a" "!newFilename!%%~Xa" 
) 
goto :EOF 


:RemoveChars filename newFilename= 
set %2= 
:nextChar 
    set "char=!%1:~0,1!" 
    if "!preserve:%char%=!" neq "%preserve%" set "%2=!%2!%char%" 
    set "%1=!%1:~1!" 
if defined %1 goto nextChar 
exit /B 

версию ниже будет работать намного быстрее, чем предыдущая, но требует несколько модификаций для того, чтобы управлять определенными специальными символами в remove строки.

@echo off 
setlocal EnableDelayedExpansion 
set [email protected]#$()[] 
for %%a in (*.*) do (
    set "filename=%%~Na" 
    call :RemoveChars filename newFilename= 
    if "!newFilename!" neq "%%~Na" ren "%%a" "!newFilename!%%~Xa" 
) 
goto :EOF 


:RemoveChars filename newFilename= 
set "%2=!%1!" 
set "remove2=!remove!" 
:nextChar 
    set "char=!remove2:~0,1!" 
    set "%2=!%2:%char%=!" 
    set "remove2=!remove2:~1!" 
if defined remove2 goto nextChar 
exit /B 
0

Это работает очень хорошо. Кто-нибудь может интегрировать этот код в верхнее решение, чтобы он первым заменил немецкий Umlaute перед удалением других специальных символов? ä -> ая ü -> уе ö -> ая ß -> сс

Я нашел это:
`

@echo off  
SET VARX=%1%  
SET VARX=%VARX:„=ae%  
SET VARX=%VARX:”=oe%  
SET VARX=%VARX:=ue%  
SET VARX=%VARX:á=ss%  
ECHO %VARX%  
SET VARX=  
pause 

`

Смежные вопросы