Batch file 使用Windows命令行,删除不需要的前缀

Batch file 使用Windows命令行,删除不需要的前缀,batch-file,for-loop,command,findstr,Batch File,For Loop,Command,Findstr,我有许多文件需要重命名,但没有它们当前的前缀。不幸的是,没有严格的格式 01 - MYFILE.txt 02 - MYFILE - Maybe with extra hypen.mp3 333 - MYFILE.bin 应将其重命名为: MYFILE.txt MYFILE - Maybe with extra hypen.mp3 MYFILE.bin 基本上,我想删除[0-9-]类中的任何字符,即任何hypen、digit和space,直到找到不在该类中的字符 我需要使用批处理文件来完成这项

我有许多文件需要重命名,但没有它们当前的前缀。不幸的是,没有严格的格式

01 - MYFILE.txt
02 - MYFILE - Maybe with extra hypen.mp3
333 - MYFILE.bin
应将其重命名为:

MYFILE.txt
MYFILE - Maybe with extra hypen.mp3
MYFILE.bin
基本上,我想删除[0-9-]类中的任何字符,即任何hypen、digit和space,直到找到不在该类中的字符


我需要使用批处理文件来完成这项工作。使用DOS for/f命令来完成这项工作并不难

假设您有一个名为test.txt的文件:

01 - MYFILE.txt
02 - MYFILE - Maybe with extra hypen.mp3
333 - MYFILE.bin
下面是一个批处理文件,可能会有所帮助。在我的例子中命名为test.bat:

FOR /F "tokens=1,2* delims=0123456789- " %%i in (test.txt) do @echo %%i %%j %%k
set /p DUMMY=Hit ENTER to continue...
以下是cmd窗口中的结果:

C:\Users\Ron Fredericks\Desktop>FOR /F "tokens=1,2* delims=0123456789- " %i in (
test.txt) do @echo %i %j %k
MYFILE.txt
MYFILE Maybe with extra hypen.mp3
MYFILE.bin

C:\Users\Ron Fredericks\Desktop>set /p DUMMY=Hit ENTER to continue...
Hit ENTER to continue...
@ECHO关闭
SETLOCAL
设置sourcedir=u:\test
对于(“%sourcedir%\*”)中的%%o,请执行以下操作(
对于/f“tokens=*delims=0123456789-”%%a IN(“%%~nxo”)DO(
ECHO REN“%%o”“%%a”
如果/i不是“%%~nxo”==“%%a”回送选通REN“%%o”%%a”
)
)
后藤:EOF
所需命令仅用于测试目的。验证命令是否正确后,将
ECHO-REN
更改为
REN
,以实际重命名文件

示例源目录列表:

 Directory of u:\test

06/01/2014  08:36                 0 01 - myfile.txt
06/01/2014  08:37                 0 02 - myfile - maybe with extra hypen.mp3
06/01/2014  08:38                 0 333 - myfile.bin
06/01/2014  08:38                 0 leave me alone - I am not to change.atall
结果:

REN "u:\test\01 - myfile.txt" "myfile.txt"
REN "u:\test\02 - myfile - maybe with extra hypen.mp3" "myfile - maybe with extra hypen.mp3"
REN "u:\test\333 - myfile.bin" "myfile.bin"
REN "u:\test\leave me alone - I am not to change.atall" "leave me alone - I am not to change.atall"


编辑-新建
gated
rename行,以绕过重命名为相同名称的尝试。

不要依赖可能会过时的文本文件-为什么不将for循环更改为-
for/F“tokens=1,2*delims=0123456789-”%i in('dir/B directory\to\check'))do@echo%%i%%j%%k
由于不太习惯各种for命令,我没有想到嵌套for循环。美好的