如何将文件重命名为除去除字母和数字以外的所有其他字符的文件名?
例如:
‘s_A品牌(新)#年,2016年!.txt更名为.txt
用Windows批处理可以做到这一点吗?
发布于 2015-11-24 22:15:13
将下面的代码保存为批处理文件(具有.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"发布于 2015-11-24 23:10:33
@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相当直截了当。注意,只保留名称中的最后一个点(如果有的话)。
发布于 2015-11-28 21:01:25
我编写了一个名为JREN.BAT的混合批处理/JScript实用程序,它提供了直接从命令行重命名的正则表达式,而不需要任何额外的脚本。它是纯脚本,从XP开始在任何Windows机器上本地运行。
该解决方案类似于Aacini的解决方案,除非find/替换应用于整个名称,因此正则表达式必须更复杂一些才能保留扩展点。
jren "[^a-z0-9.]|\.(?!txt$)" "" /i /fm "It's_A Brand (New) #Year,,2016!.txt"该解决方案可以很容易地从当前目录中的所有文件名中删除所有非字母数字字符,但它保留扩展名点。
jren "[^a-z0-9.]|\.(?![^.]+$)" "" /i注意,JREN是一个批处理脚本,所以如果在另一个批处理脚本中使用命令,则必须使用call jren。
https://stackoverflow.com/questions/33901753
复制相似问题