2013-05-21 31 views
0

我有一个目录中有很多需要重命名的文件。对于每个文件,我需要获取文件名的前三个字符,并将它们移到文件名的末尾,然后再放到扩展名前。 所以003999999.wav会变成999999003.wav。将脚本的前3个字符移动到末尾的脚本

脚本语言并不重要。它只需要在Windows中工作。这似乎是一个简单的脚本使用VBScript,我目前正在读一些东西,但我想知道是否有人已经有这样的工作。

编辑 - 所以我想我已经找到了如何做到这一点,除了获取文件名字符的部分。这是我的。

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFSO.GetFolder("C:\Directory") 


For Each strFile in objFolder.Files 
arrNames = Split(strFile.Name, ".") 
If arrNames(1) = "mp3" Then 

    Set objstart = objFSO.Range(0,3) 
    Set objend = objFSO.Range(4,17) 
    strNewName = "C:\Directory\" & objend.Text & objstart.Text & ".mp3" 

    objFSO.MoveFile strFile.Path, strNewName 
End If 
Next 
+0

你做什么,如果已被使用做名字? – stark

+0

这绝对不会是一个基于这些文件最初如何获取其名称的问题。但是,因为我知道这是不好的做法,只希望它永远不会发生,如果发生这种情况,我会在文件名的末尾添加(1),(2),(3)。因此,如果999999003.wav存在,请使用999999003(1).wav。 但实际上,它永远不会是一个问题。 – barry

+0

你可以使用Scripting.FileSystemObject.GetExtensionName作为文件扩展名(wav,mp3) –

回答

0

试试这个脚本。我使用简单的字符串函数来操作每个文件名。

'Rename Files 
'============ 
Dim objFSO, objFolder, strFile, intLength, firstThree, restofName, strNewName 

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFSO.GetFolder("C:\Directory") 

For Each strFile in objFolder.Files 

    'Get files by extension 
    If objFSO.GetExtensionName(strFile.Name) = "mp3" Then 

     'Use instr to get the location of the "." and subtract 1 for the "." 
     intLength = InStr(1,strFile.Name,".",1)-1 

     'Use the Left function to get the first three characters of the filename 
     firstThree = Left(strFile.Name,3) 

     'Use the Mid function to get the rest of the filename subtract 3 for the file extension 
     restofName = Mid(strFile.Name,4,intLength -3) 

     strNewName = "C:\Directory\" & restofName & firstThree & ".mp3" 
     objFSO.MoveFile strFile.Path, strNewName 

    End If 
Next 

WScript.Echo "Done!" 
0

代替虚构.Range方法,使用正则表达式:

>> s1 = "003999999.wav" 
>> Set r = New RegExp 
>> r.Pattern = "(\d{3})(\d+)(\.wav)" 
>> s2 = r.Replace(s1, "$2$1$3") 
>> WScript.Echo s2 
>> 
999999003.wav 

削减三位数(\ d {3}),其他的数字(d +),和(转义)点,然后是输入字符串的扩展名(wav),并重新排列.Replace中的3个部分。

+0

确实。 Range方法是我在脚本专家中看到的。它被用来读取.doc的一部分来做类似于我正在做的事情。我划过手指放进去。显然不正确。感谢这个建议。 – barry

0

简化JP's solution版本:

Set fso = CreateObject("Scripting.FileSystemObject") 
For Each f In fso.GetFolder("C:\Directory").Files 
    extension = fso.GetExtensionName(f.Name) 
    If LCase(extension) = "mp3" Then 
    basename = fso.GetBaseName(f.Name) 
    f.Name = Mid(basename, 4) & Left(basename, 3) & "." & extension 
    End If 
Next 

在批处理你会做这样的:

@echo off 

setlocal EnableDelayedExpansion 

for %%f in (C:\Directory\*.mp3) do (
    set basename=%%~nf 
    ren "%%~ff" "!basename:~3!!basename:~0,3!%%~xf" 
) 

endlocal 
+0

谢谢。有趣的是,当我得到30个文件被重新命名时,它没有正确执行。相反,它将中间的前3个字符放在12,13,14,而不是最后的15,16,17。 – barry

相关问题