Переименование пакета файлов с использованием пакетного сценария DOS или vbscript - PullRequest
1 голос
/ 22 августа 2011

Я ищу либо пакетный сценарий, либо vbscript (предпочтительно vbscript), который поможет мне переименовать целую папку, содержащую около 5000 файлов.

Файлы для переименования имеют имена в следующем формате: nnnnnnnnnnnnnnnn.dddddddd.pdf, где n - это номер no. 0-9 и d - это дата в этом примере формата 01232009 (23 января 2009 г.).

Мне нужно иметь возможность взять последние 4 d имени файла и переместить их перед первыми четырьмя d имени файла. Все имена файлов согласованы и используют одинаковый точный формат. Вот пример того, чего я пытаюсь достичь:

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

Это так, что когда я сортирую файлы, они могут быть отсортированы в порядке возрастания или убывания по дате. Есть идеи, как заставить это работать?

Ответы [ 2 ]

1 голос
/ 23 августа 2011

для чистого решения .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

1 голос
/ 23 августа 2011

Это в основном тот же сценарий, что и в ответе на предыдущий вопрос.
Это просто делает что-то другое с датами.
Кроме того, он повторяет имена файлов, чтобы вы могли видеть, что он делает.

Сбой, если целевой файл уже существует.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...