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
4

3 に答える 3

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
于 2013-05-20T03:39:58.360 に答える
0

これは本当にうまくいきます。他の特殊文字を削除する前にドイツ語のウムラウトを最初に置き換えるように、誰かがこのコードを上位のソリューションに統合できますか? ä -> 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 

`

于 2013-11-20T17:26:27.763 に答える
0

または、名前変更機能を使用し実行できます。

$ renamer --regex --find '\W' *
于 2013-10-05T08:49:00.377 に答える