2016-06-16 79 views
-1

我试图调整提供给类似问题的很多代码,但我不认为解决方案已发布。我的问题是,我想删除其余的部分在最后一次存在2次!批量删除部分文件名

我拥有的是一个文件夹:

number1-number2-number3 - some random text about the file.filetype 

NUMBER1将范围从01到99
NUMBER2范围从1-99999
number3的范围从1-999可能有2位小数,与整数分开。

示例文件夹c:\temp\

15-1592-1 - file 1.doc 
15-1592-2 - this is file2.pdf 
15-1592-3 - this cointains subfiles.html 
15-1592-3.1 - sub1.jpg 
15-1592-3.2 - sub2.pdf 

我需要的是这里的一切number3的结束后从文件名删除一个文件夹,而且该文件类型不变。

例子:

15-1592-1.doc 
15-1592-2.pdf 
15-1592-3.html 
15-1592-3.1.jpg 

我明白这是安静的可能读取所有的答案相结合。

我缺乏的是编译它的知识!

+0

?请通过[编辑](http://stackoverflow.com/posts/37863134/edit)分享您的代码! – aschipfl

回答

1

要在其后删除一切第一空间(不包括扩展名)
这是很容易的,如果使用调节剂(见for /?):你尝试过什么到目前为止

@echo off 
setlocal enabledelayedexpansion 
for %%a in (??-*-*) do (
    for /f "tokens=1 delims= " %%b in ("%%~na") do (
    ECHO ren "%%a" "%%b%%~xa" 
) 
) 
+0

我没有看到你的答案。聪明地使用通配符,我完全忘记了它们。 – elzooilogico

+0

是的。确实非常有用!谢谢! – TrueTom

0

其狡猾有点提取小数部分(如果存在的话),但应做的工作(可能需要一些象征性的调整,以满足您的需求)

@echo off 

setlocal enabledelayedexpansion 

set "source_path=c:\temp\*" 

for /f "tokens=1,* delims=." %%a in ('dir /b %source_path%') do (
    set "ext=" & set "decimal=" 
    for /f "tokens=1,* delims=." %%i in ("%%b") do (
    if "%%j" neq "" (
     set "ext=%%j" 
     for /f "tokens=1,* delims=- " %%d in ("%%i") do set "decimal=.%%d" 
    ) else (
     set "ext=%%i" 
    ) 
) 
    for /f "tokens=1-3,* delims=- " %%i in ("%%a") do (
    rem replace echo with operation you need 
    echo %%i-%%j-%%k!decimal!.!ext! 
) 
) 

endlocal