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

时间:2014-01-05 23:30:50

标签: 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-]中的任何字符,即任何超级,数字,空格UNTIL一个字符被发现不属于这个类。

我需要使用批处理文件

完成此操作

2 个答案:

答案 0 :(得分:2)

@ECHO OFF
SETLOCAL
SET sourcedir=u:\test
FOR %%o IN ("%sourcedir%\*") DO (
 FOR /f "tokens=*delims=0123456789- " %%a IN ("%%~nxo") DO (
  ECHO REN "%%o" "%%a"
  IF /i NOT "%%~nxo"=="%%a" ECHO gated REN "%%o" "%%a"
 )
)
GOTO :EOF

所需命令仅用于ECHO以用于测试目的。在您确认命令正确无误后,将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重命名行以绕过重命名为同名的尝试。

答案 1 :(得分:0)

使用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...