如何将一个文件重命名为一个除字母和数字之外的所有其他字符的文件名?
例如:
It's_A品牌(新)#年,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 "[az] [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的混合批处理/ JScript实用程序,它直接从命令行提供正则表达式重命名,而不需要任何额外的脚本。 这是纯粹的脚本,从XP以后的任何Windows机器上本机运行。
该解决方案与Aacini类似,只是将查找/替换应用于整个名称,所以正则表达式必须稍微复杂才能保留扩展点。
jren "[^a-z0-9.]|\.(?!txt$)" "" /i /fm "It's_A Brand (New) #Year,,2016!.txt"
解决方案可以很容易地从当前目录中的所有文件名中删除所有非字母数字字符,除了保留扩展点。
jren "[^a-z0-9.]|\.(?![^.]+$)" "" /i
请注意,JREN是批处理脚本,所以如果在另一个批处理脚本中使用该命令,则必须使用call jren
。