Переименование файлов PDF с помощью командного файла - PullRequest
0 голосов
/ 17 августа 2011

Мне нужно написать командный файл или VBScript, который будет переименовывать файлы. Мне нужно сохранить все в имени файла до второго "." но удалите то, что идет после второй точки.

Это пример того, как выглядят имена файлов:

nnnnnnnnnnnnnnnn.xxxxxxxx.dddddddddd.pdf 
  • n = 16 цифр 0-9
  • x = дата в этом формате, например: 02232008
  • d = 10 чисел 0-9, это часть имени файла, которую я хочу удалить .

Мне нужно удалить буквы d из примера выше, но оставьте имя файла без изменений. Мне нужно иметь возможность запустить этот пакетный файл в папке, содержащей около 3000 файлов PDF. Его можно либо вернуть обратно в ту же папку, либо вывести в другую папку.

Ответы [ 3 ]

1 голос
/ 17 августа 2011
FOR /F "USEBACKQ delims=. tokens=1-4" %%F IN (`DIR /B /A-D "C:\Path\To\PDFs\"`) DO (
  REN "%%~fF.%%G.%%H.%%I" "%%F.%%G.%%I"
)

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

0 голосов
/ 14 февраля 2014

Используя StringSolver , полуавтоматический инструмент переименования, просто переименуйте первый файл, проверьте, что обобщенное переименование в порядке, а затем примите его для всех остальных файлов.

> move 1234567890123456.02232008.1946738250.pdf 1234567890123456.02232008.pdf

Получите объяснение:

> move --explain

the file name until the end of the second number + the extension

Если вы удовлетворены, вы можете запустить полуавтоматический инструмент, используя move --auto или версию succint:

> move

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я являюсь соавтором этого бесплатного программного обеспечения, созданного для академических целей.

0 голосов
/ 17 августа 2011

В VBScript вы можете использовать что-то вроде

' the file paths. hardcoded, but you could alternatively collect these via command line parameters
Const IN_PATH = "path\to\directory"
Const OUT_PATH = "path\to\another\directory"

' check that the directories exist. you could create them instead, but here
' it just throws an error as that's easier
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, ".")
    ' we're expecting a file format of a.b.c.pdf
    ' so we should have 4 elements in the array (zero-indexed, highest bound is 3)
    if UBound(parts) = 3 then
        ' rebuild the name with the 0th, 1st and 3rd elements
        dim newname: newname = parts(0) & "." & parts(1) & "." & parts(3)
        ' use the move() method to effect the rename
        file.move fso.buildpath(OUT_PATH, newname)
    else
        ' log the fact that there's an erroneous file name
        WScript.Echo "Unexpected file format: '" & name & "'"
    end if
next 'file

Таким образом, вы запускаете его в пакетном файле, перенаправляя вывод в файл журнала

cscript rename-script.vbs > logfile.txt

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


Чтобы переставить дату, которая, я думаю, находится в элементе массива parts(1)Вы можете просто извлечь каждый бит строки, потому что он имеет определенный формат:

'date in format mmddyyyy
dim month_, day_, year_, date_
month_ = left(parts(1), 2)
day_ = mid(parts(1), 3, 2)
year_ = right(parts(1), 4)
date_ = year_ & month_ & day_ ' now yyyymmdd

, поэтому при перестройке имени файла вы можете заменить parts(1) на новую отформатированную дату

dim newname: newname = parts(0) & "." & date_ & "." & parts(3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...