Войти

Показать полную графическую версию : помогите реализовать копирование со счетчиком!


mpg_kyron
02-07-2013, 16:53
1. Какими командами в bat файле возможно реализовать операцию копирования "счетчиком"?
Есть файл с названием типа MO_024_109.doc Его копируем в папку "готово", копируем НОВЫЙ ЧИСТЫЙ файл с названием шаблон.doc и переименовываем его в MO_024_110.doc
Если можно, с пояснениями, поскольку названия файлов будут разные, а следовательно такие операции будут для каждого свои (RO_024_225.doc -> RO_024_226.doc, DT_024_311.doc -> DT_024_312.doc и т.д.).

2. Какими командами в bat файле дописывать в название файла?
Файл с названием типа MO_024_109.doc копируем в папку "готово", и дописываем в конец файла _R, чтобы получилось MO_024_109_R.doc

Iska
02-07-2013, 17:01
Есть файл с названием типа MO_024_109.doc »
названия файлов будут разные »
Откуда мы знаем его название? По каким правилам оно сформировано? По каким критериям мы можем судить, что это именно «тот самый» файл?

2. Какими командами в bat файле дописывать в название файла? »
Ответ будет зависеть от Ваших ответов на заданные выше вопросы.

mpg_kyron
02-07-2013, 17:27
1. Название файла состоит из: MO - название отдела, 024 - номер выпуска газеты, 100 - номер текста. Соответственно, отделов несколько, для каждого своя буквенная идентификация. Номер выпуска меняется раз в неделю, в бате предполагаю менять вручную. Номер текста сделан следующим образам - первая цифра - номер сотрудника, вторые две - порядковый номер текста. Соответственно, каждому тексту соответствует уникальное (относительно) название файла. После того как документ написан, он батом отправляется в папку "готово", и тем же батом создается новый файл со следующим номером (+1 в конце названия). 100 файлов более чем достаточно.

2. Дописывание нужно для идентификации прохождения файла по инстанциям - редактор, ведущий редактор, корректор. Соответственно, файл сначала называется MO_024_109.doc, затем MO_024_109_R.doc, затем MO_024_109_R_SA.doc, затем MO_024_109_R_SA_K.doc. Тоесть, по названию файла можно понять, что с ним происходило, и в крайнем случае вернуться к старой версии текста.

Iska
03-07-2013, 12:06
mpg_kyron, на WSH, пробуйте:
Option Explicit

Const strTemplateFile = "E:\Песочница\0288\01\шаблон.doc"
Const strDestinationFolder = "E:\Песочница\0288\02"


Dim strSourceFile
Dim strSourceFolder

Dim objFSO
Dim objFile
Dim objRegExp

Dim strNewFileName


If WScript.Arguments.Count = 1 Then
With WScript.CreateObject("Scripting.FileSystemObject")
strSourceFile = .GetAbsolutePathName(WScript.Arguments.Item(0))
strSourceFolder = .GetParentFolderName(strSourceFile)

If .FileExists(strSourceFile) Then
Set objFile = .GetFile(strSourceFile)
Set objRegExp = WScript.CreateObject("VBScript.RegExp")

objRegExp.Pattern = "^((?:MO|RO|DT)_\d{3}_)(\d{3})(\.doc)$"

If objRegExp.Test(objFile.Name) Then
With objRegExp.Execute(objFile.Name).Item(0)
strNewFileName = .SubMatches(0) & Right("000" & CStr(CLng(.SubMatches(1)) + 1), 3) & .SubMatches(2)
End With

If .FileExists(strTemplateFile) Then
.CopyFile strTemplateFile, .BuildPath(strSourceFolder, strNewFileName), True
Else
WScript.Echo "Can't find template file [" & strTemplateFile & "]."
End If

If .FolderExists(strDestinationFolder) Then
objFile.Name = .GetBaseName(objFile.Name) & "_R." & .GetExtensionName(objFile.Name)
objFile.Copy strDestinationFolder & "\", True
objFile.Delete True
Else
WScript.Echo "Can't find destination folder [" & strDestinationFolder & "]."
End If
Else
WScript.Echo "Source file [" & strSourceFile & "] not match for pattern [" & objRegExp.Pattern & "]."
End If

Set objRegExp = Nothing
Set objFile = Nothing
Else
WScript.Echo "Can't find source file [" & strSourceFile & "]."
End If
End With
Else
WScript.Echo "Usage: wscript.exe """ & WScript.ScriptName & """ <Source file>"
End If

WScript.Quit 0

Примечания:

1. Имя файла должно удовлетворять шаблону: два символа имени отдела — одно из «MO», «RO», «DT» (если потребны другие — добавляйте в шаблон); знак подчёркивания; обязательные три цифры; знак подчёркивания; обязательные три цифры; точка между именем и расширением; расширение «doc».

2. Все существующие файлы перезаписываются без запроса. Например, если в папке назначения («готово») будет существовать файл с тем же именем, что и выбранный для обработки исходный файл — он будет молча перезаписан. И т.п.

3. Наиболее удобно будет работать со сценарием, дав ему какое-либо осмысленное имя (например, «Отправить на дальнейшую обработку.vbs») и создав на него ярлык в папке «%UserProfile%\SendTo» (ярлык тоже стоит переименовать, убрав начальное «Ярлык на…»). Затем достаточно будет просто щёлкнуть по потребному для обработки файлу правой клавишей мышки и выбрать из контекстного меню «Отправить → Отправить на дальнейшую обработку».




© OSzone.net 2001-2012