去除非字母数字字符的文件名

Strip file name of non-alphanumeric characters

如何将文件重命名为去除除字母和数字以外的所有其他字符的文件名?

例如:

It's_A Brand (New) #Year,2016!.txt 重命名为 ItsABrandNewYear2016.txt

是否可以用 Windows 批处理来做到这一点?

将以下代码另存为批处理文件(扩展名为 .BAT):

@if (@CodeSection == @Batch) @then

@echo off
setlocal

set "oldname=It's_A Brand (New) #Year,,2016!.txt"
for %%f in ("%oldname%") do (
   for /F %%a in ('cscript //nologo //E:JScript "%~F0" "%%~Nf"') do ECHO ren "%%~f" "%%a%%~Xf"
)
goto :EOF


@end

// JScript section

WScript.Stdout.WriteLine(WScript.Arguments(0).replace(/[\W_]/g,""));

输出:

ren "It's_A Brand (New) #Year,,2016!.txt" "ItsABrandNewYear2016.txt"
@ECHO OFF
SETLOCAL
set "filename=It's_A Br@$^[-+={;}]a.nd & (New) #Year,,2016!.txt"
SET "newname="
FOR %%a IN ("%filename%") DO CALL :strip "%%~na" "%%~xa"
ECHO RENAME "%filename%" to "%newname%"

GOTO :EOF

:strip
SET "string=%~1"
IF NOT DEFINED string SET "newname=%newname:~0,-1%"&GOTO :EOF
:striploop
SET "char=%string:~0,1%"
ECHO "%char%"|FINDSTR /i /r "[a-z] [0-9]" >NUL
IF NOT ERRORLEVEL 1 SET "newname=%newname%%char%"
SET "string=%string:~1%"
IF DEFINED string GOTO striploop
SHIFT
SET "newname=%newname%."
GOTO strip

相当直截了当。请注意,仅保留名称中的最后一个点(如果有)。

我编写了一个名为 JREN.BAT 的混合 batch/JScript 实用程序,它可以直接从命令行提供正则表达式重命名,而无需任何额外的脚本编写。它是纯脚本,可​​以在任何 Windows XP 以后的机器上本地运行。

解决方案与 Aacini 类似,只是 find/replace 应用于整个名称,因此正则表达式必须更复杂一些才能保留扩展点。

jren "[^a-z0-9.]|\.(?!txt$)" "" /i /fm "It's_A Brand (New) #Year,,2016!.txt"

解决方案可以很容易地从当前目录中的所有文件名中删除所有非字母数字字符,除了它保留扩展点。

jren "[^a-z0-9.]|\.(?![^.]+$)" "" /i

请注意,JREN 是一个批处理脚本,因此如果您在另一个批处理脚本中使用该命令,则必须使用 call jren