我有一堆文件,我想删除所有不在字母表中的字符。所以给定一个文件名“Home - noises(f).txt”我想要一个“Home noises 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 :(得分: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 remove=@#$()[]
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
答案 1 :(得分:0)
或者,renamer可以运行:
$ renamer --regex --find '\W' *
答案 2 :(得分:0)
这非常有效。是否有人能够将此代码集成到上层解决方案中,以便在删除其他特殊字符之前先替换德语Umlaute? ä - > aeü - > ueö - > oeß - > ss
我发现了这个:
`
@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
`