【问题标题】:removing nonalphabet characters in a filename删除文件名中的非字母字符
【发布时间】:2013-05-14 11:24:07
【问题描述】:

我有一堆文件,我想删除所有不在字母表中的字符。所以给定一个“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

【问题讨论】:

  • 空间不是 alpha - 为什么要保留?数字呢?
  • 这些将是保留的字符“abcdefghijklmnopqrstuvwxyz 1234567890”,但没有“特殊”字符
  • . 怎么样?如果名称仅包含“特殊”字符会怎样?如果 2 个名称合并为一个,例如“a&b”、“a+b”,会发生什么情况?

标签: batch-file character filenames rename alphabet


【解决方案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

【讨论】:

    【解决方案2】:

    或者,您可以使用renamer 运行:

    $ renamer --regex --find '\W' *
    

    【讨论】:

      【解决方案3】:

      这真的很好用。是否有人能够将此代码集成到上层解决方案中,以便在删除其他特殊字符之前先替换德语变音符号? ä -> 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 
      

      `

      【讨论】:

        猜你喜欢
        • 2016-02-27
        • 1970-01-01
        • 1970-01-01
        • 2021-02-25
        • 2015-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多