2012-06-18 100 views
2

Heythere。 我需要你们的帮助,使用.bat文件进行文件重命名。 我得到了多个文件,我需要在指定的字符数之后进行裁剪。 对于exmample,我希望自己的第五个字符后,裁剪文件的名称,这样文件名使用.bat重命名?

filename.exe > filen.exe 
anothername.exe > anoth.exe 
absolutelydifferentname.exe > absol.exe 

而且,如果可能的话,我想知道怎么做相反。我的意思是,将特定的字符留在最后,从文件名开头剪切。

谢谢。如果你想要做一个批处理文件

+2

如果你有'filename.exe'和'filename2.exe',会发生什么?你不能有两个'filen.exe' .. – Blorgbeard

+1

http://stackoverflow.com/questions/636381/what-is-the-best-way-to-do-a-substring-in-a-batch -file可能是有用的,因为你需要找到子字符串。 Blorgbeard的评论是你需要考虑如何处理的。 – Shoaib

回答

4

,下面应该工作:

@echo off 

setlocal ENABLEDELAYEDEXPANSION 

for %%i in (<Directory name here>\*) do (
    set filename=%%~ni 
    ren "%%~i" "!filename:~0,5!%%~xi" 
) 

endlocal 

如果您想更改用于构造最终文件名的字符数,请更改ren "%%~i" "!filename:~0,5!%%~xi"中的“5”。

采取的最后5个字符尝试:ren "%%~i" "!filename:~-5!%%~xi"

对于所有除了前5个字符:ren "%%~i" "!filename:~5!%%~xi"

+0

非常感谢@ @ Irdium。 (* .exe)do( set filename = %%〜ni ren“%%〜i”“!filename:〜0,5!%%〜xi”这样编辑 'setlocal EnableDelayedExpansion )' 它似乎做得很好。 我也想知道如果你知道如何让它从开头而不是结尾修剪字符? – get8p

+0

我编辑了我的答案,包括你的建议(知道必须有一种方法,但没有检查setlocal)。我还添加了最后一个X字符的方法 – Iridium

+0

是的,就是这样。 感谢队友,你是最棒的! – get8p

0

只是柜面这是一次性的,或者一些其他的手动场景,看看 CKRename

2

Iridium solution会失败,如果任何文件名包含!字符,因为%%i扩张将失败如果值包含!并且启用延迟扩展。这很容易通过在循环中打开和关闭延迟扩展来解决。

通常不需要在顶部显式禁用延迟扩展。但是可能在批处理文件的启动时已经启用了延迟扩展,因此我只是为了安全起见而将其包含在内。

@echo off 
setlocal disableDelayedExpansion 
for %%F in ("<Directory name here>\*") do (
    set "full=%%F" 
    set "name=%%~nF" 
    set "ext=%%~xF" 
    setlocal enableDelayedExpansion 
    ren "!full!" "!name:~0,5!!ext!" 
    endlocal 
) 
+0

+1,如果你使用扩展的'SET'语法,它对于隐形空间也是安全的:-) – jeb

+0

@jeb非常真实 - 完成 – dbenham