0

我有一个目录,里面有我需要重命名的文件。对于每个文件,我需要获取文件名的前三个字符并将它们移动到文件名末尾的扩展名之前。所以 003999999.wav 会变成 999999003.wav。

脚本语言并不重要。它只需要在 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
4

3 回答 3

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!"
于 2013-05-21T21:50:37.713 回答
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 个部分。

于 2013-05-21T21:52:04.330 回答
0

JP解决方案的简化版:

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
于 2013-05-21T22:22:29.963 回答