Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   помогите реализовать копирование со счетчиком! (http://forum.oszone.net/showthread.php?t=263611)

mpg_kyron 02-07-2013 16:53 2178147

помогите реализовать копирование со счетчиком!
 
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 2178159

Цитата:

Цитата mpg_kyron
Есть файл с названием типа MO_024_109.doc »

Цитата:

Цитата mpg_kyron
названия файлов будут разные »

Откуда мы знаем его название? По каким правилам оно сформировано? По каким критериям мы можем судить, что это именно «тот самый» файл?

Цитата:

Цитата mpg_kyron
2. Какими командами в bat файле дописывать в название файла? »

Ответ будет зависеть от Ваших ответов на заданные выше вопросы.

mpg_kyron 02-07-2013 17:27 2178189

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 2178581

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» (ярлык тоже стоит переименовать, убрав начальное «Ярлык на…»). Затем достаточно будет просто щёлкнуть по потребному для обработки файлу правой клавишей мышки и выбрать из контекстного меню «Отправить → Отправить на дальнейшую обработку».


Время: 23:30.

Время: 23:30.
© OSzone.net 2001-