1

我正在寻找一个批处理脚本或 vbscript(最好是 vbscript),它可以帮助我重命名大约 5,000 个左右文件的整个文件夹。

要重命名的文件具有以下格式的名称: nnnnnnnnnnnnnnnn.dddddddd.pdf 其中 n 为否。0-9 和 d 是此示例格式 01232009(2009 年 1 月 23 日)中的日期。

我需要能够获取文件名的最后 4 个 d 并将它们移动到文件名的前 4 个 d 的前面。所有文件名都是一致的,并使用相同的确切格式。这是我要完成的一个示例:

nnnnnnnnnnnnnnnn.01232009.pdf ==> nnnnnnnnnnnnnnnn.20090123.pdf

这样当我对文件进行排序时,它们可以按日期升序或降序排序。知道如何进行这项工作吗?

4

2 回答 2

1

这基本上与您上一个问题的答案中的脚本相同。
它只是对日期做了一些不同的事情。
此外,它会回显文件名,因此您可以看到它在做什么。

如果目标文件已经存在,它将失败。

Const IN_PATH = "path_to\directory"
Const OUT_PATH = "path_to\directory"

dim fso: set fso = CreateObject("Scripting.FileSystemObject")
if not fso.FolderExists(IN_PATH) then
    err.raise 1,, "Path '" & IN_PATH & "' not found"
end if
if not fso.FolderExists(OUT_PATH) then
    err.raise 1,, "Path '" & OUT_PATH & "' not found"
end if

dim infolder: set infolder = fso.GetFolder(IN_PATH)
dim file
for each file in infolder.files
    dim name: name = file.Name
    dim parts: parts = split(Name, ".")

    ' Look for a file format of nnnnnnnnnnnnnnnn.dddddddd.pdf
    ' where the first segment is (I don't care) and dddddddd is
    ' a date, encoded.  for example 01232009 implies (January
    ' 23, 2009).
    If UBound(parts) = 2 And parts(2) = "pdf" And Len(parts(1)) = 8 Then
        ' build a new name, re-arranging the date
        dim newname: newname = parts(0) & "." & _
            Mid(parts(1), 5, 4) & Mid(parts(1), 1, 4) & "." & parts(2)
        ' use the move() method to effect the rename
        WScript.Echo Name & " ==> " & newname
        file.move fso.buildpath(OUT_PATH, newname)
    Else
        WScript.Echo "Not renaming file: '" & name & "'"
    End If
Next 'file
于 2011-08-22T23:50:28.893 回答
1

对于纯 .BAT 解决方案,试试这个

@echo off
SETLOCAL enabledelayedexpansion
FOR %%a IN (*.*) DO (
  CALL :cn %%a
  echo REN %%a !a!
)
GOTO :eof
:cn
SET a=%1
SET a=%a:~0,-13%.%a:~-8,4%%a:~-12,4%.pdf
GOTO :eof

经过仔细测试,删除echo命令

于 2011-08-23T17:46:01.093 回答