首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非字母数字字符的带文件名

非字母数字字符的带文件名
EN

Stack Overflow用户
提问于 2015-11-24 19:02:46
回答 3查看 2.2K关注 0票数 2

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

例如:

‘s_A品牌(新)#年,2016年!.txt更名为.txt

用Windows批处理可以做到这一点吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-24 22:15:13

将下面的代码保存为批处理文件(具有.BAT扩展名):

代码语言:javascript
复制
@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,""));

输出:

代码语言:javascript
复制
ren "It's_A Brand (New) #Year,,2016!.txt" "ItsABrandNewYear2016.txt"
票数 3
EN

Stack Overflow用户

发布于 2015-11-24 23:10:33

代码语言:javascript
复制
@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

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

票数 3
EN

Stack Overflow用户

发布于 2015-11-28 21:01:25

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

该解决方案类似于Aacini的解决方案,除非find/替换应用于整个名称,因此正则表达式必须更复杂一些才能保留扩展点。

代码语言:javascript
复制
jren "[^a-z0-9.]|\.(?!txt$)" "" /i /fm "It's_A Brand (New) #Year,,2016!.txt"

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

代码语言:javascript
复制
jren "[^a-z0-9.]|\.(?![^.]+$)" "" /i

注意,JREN是一个批处理脚本,所以如果在另一个批处理脚本中使用命令,则必须使用call jren

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33901753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档