2013-05-21 32 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

相關問題