我对批处理脚本还很陌生。
有针对此问题的解决方案Linux 和 macOS,但我需要它用于 Windows。
我有以下内容,它只对特殊字符 !@#$%^&*~ 等有效,基本上就是您在键盘上看到的字符。 但我需要删除 Â 和 ° 等特殊字符。以下脚本对这两个特定字符不起作用。,我可以通过 cmd 运行脚本。这但它与 winows7 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
)
以下只能删除文件名中的空格
@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
)
)
答案1
如果您考虑到脚本必须使用代码页 437,那么您的第一个脚本对我来说就有效了。
将以下脚本粘贴到记事本中。使用 ANSI 编码保存为 test.bat。
@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
)
上述脚本将重命名degree°.txt
为degree.txt
。
使用 ø 是因为它是 Unicode U+00F8
。度数符号位于0xF8
代码页 437 中。
 未出现在代码页 437 中,因此我不知道是否有并行解决方案。可能需要按照此答案的指示更改代码页才能正确执行。以下是包含更改代码页的批处理文件的尝试。
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
)
将以上内容粘贴到记事本文件中,并使用 UTF-8 编码保存。必须包含脚本的第一行,因为批处理文件在最初处理 UTF-8 文件时会出错。
答案2
我希望我能为此承担责任,但这是我偶然发现的。我找不到我找到它的帖子,所以这是凭记忆写的。
find . -depth -name "*" -print0 | $var -0 sed -i 's/[:cntrl:]/_/g' *
您可能需要稍微尝试一下,我只是从我的一个项目中抽出几分钟来发布此内容。请分享您的结果。