переименования файлов
Привет всем! помогите со скриптом, есть n-ое кол-во файлов docx и txt файл (в нем список имен) нужен скрипт которые будет брать имена с txt файла и переименовывать docx файлы согласно списка в txt файле
|
Образец списка? Есть ли в нём кириллица?
|
В нем кириллица
Пример: Иванова Иван Иванович Петров Петр Петрович Сидоров Иван Артёмович и т.д. |
mcintosh55, тогда ещё вопросы — кодировка файла какая? Каким образом ограничены имена? Каким образом старое имя отделено от нового?
|
1) наверно не правильно задал вопрос, в текстовом файле список только новых имён нужно просто по порядку переименовать. Т.е. Берём первый файл заходим в txt файл берём из первой строчки ФИО и переименовываем Файл. Все имена в txt файле в столбике.
2) имена сохранены в с помощью блокнота кодировка стандартная windows но могу переделать под какую надо |
как соотнести файлы с именем из списка?
|
Цитата:
|
Цитата:
Впрочем, вот, на WSH: Скрытый текст
Код:
Option Explicit Путь к файлу с новыми именами указывается аргументом скрипта, файлы *.docx будут искаться в том же каталоге, где находится файл с новыми именами (хоть это и категорически неправильный подход). Никаких проверок на совпадение имён не делалось. |
Цитата:
Документ1 Документ2 Документ3 ДокументN |
я может неправильно понял, но вроде как имеют место два файла: в одном файле имена пользователей, в другом - имена файлов, при этом каждая строка с именем пользователя в первом документе соответствует имени файла во втором документе.
т.е.
users.txt Иван Иваныч Иван Степаныч Иван Кузьмич files.txt 1.docx 2.docx 3.docx переименование т.о. будет таким: 1.docx -> Иван Иваныч.docx 2.docx -> Иван Степаныч.docx 3.docx -> Иван Кузьмич.docx Если я прав то на cmd получается как-то так Код:
@echo off Цитата:
|
я так понимаю список один и только имен которые надо хаотически раскидать файлам docx, так как первое имя первому файлу правильно звучит: первое по алфавиту имя в списке первому (по алфавиту, а может и нет, как по умолчанию выставлено ...?) файлу в папке.
например было: Файл 149931 после выполнения кода: Код:
@echo off Файл 149932 spisok.txt видно где, в кодировке 866 name.bat не важно где, в кодировке 866 или так можно, но кодировка тоже везде 866 Код:
@echo off |
Цитата:
Я этот многостраничный файл word обрабатываю скриптом этот скрипт мне создает много файлов word (в каждом файле по 2 странице). Пример файлов после обработки обращение в суд1.docx обращение в суд2.docx обращение в суд3.docx обращение в суд4.docx и т.д. У меня есть таблица excel которые служит для слияния в документом word в этой таблице есть столбик ФИО Я этот столбик копирую в блокнот и у меня получается: Иванов Иван Иванович Петров Артем Николаевич Петренко Игорь Иванович Сидоров Антон Владимирович и т.д. Мы берем первую строчку Иванов Иван Иванович и переименовываем обращение в суд1.docx у нас получается Иванов Иван Иванович.docx берем вторую строчку Петров Артем Николаевич и переименовываем обращение в суд2.docx у нас получается Петров Артем Николаевич.docx и так далее |
mcintosh55, вот всё как всегда. Ну, что бы Вам стоило изложить Вашу основную проблему, а не выбранное Вами решение частной задачи, а? Надо править Ваш:
Цитата:
|
вот как только? Вы перелагаете дописать скрипт где он разбивает один большой файл на маленькие файлы дергать ФИО excel файла и сразу переименовывать файл на выходе?
|
Цитата:
Ведь что у нас получается: мы знаем имена этих частей в момент слияния, мы даже можем узнать эти имена в момент сохранения отдельных частей (если они добавляются куда-либо в текст документа при слиянии, и мы знаем, куда именно). |
осталось понять как это запилить ))) слияние еще понятно а вот как потом при разбивки сохранять под нужным именем вот это вопрос
Код:
Sub SplitIntoPages() Код:
strNewFileName = Replace(docMultiple.FullName, ".doc", "_" & Right$("000" & iCurrentPage, 4) & ".doc") |
mcintosh55, хотите расскажу — как? Вы готовите:
Цитата:
Цитата:
|
|
mcintosh55, давайте попробуем проверить работоспособность подхода в его самом первом приближении.
Для начала Вам нужно удалить все ранее заполненные строки, ныне очищенные, но тем не менее значимые строки из Рабочей книги base.xls. Откройте эту Рабочую книгу, выделите какую-нибудь ячейку на первом листе Лист1, нажмите Ctrl-End. Видите, какая ячейка стала текущей? Все эти строки, пусть и видимо пустые, надо будет удалить. Выделите строки с 4 по 130 (чтоб с запасом) и удалите их. Их следует именно удалить, а не очистить их содержимое! В принципе, свойство .SuppressBlankLines должно бы было позволять игнорировать такие строки, но, похоже, оно работает несколько иначе, нежели мне предполагалось, увы. Затем попробуйте исполнить следующий код, сохранив его в файле с расширением .wsf и заменив в нём все пути на Ваши: Скрытый текст
Код:
<job> Я здесь не делал пока никаких проверок, только проверил работоспособность. У меня результатом было создание двух файлов: Код:
Иванов Иван Иванович.doc |
office 2013 /2016, скрипт ругается на 5 строчку: Методы или свойство OpenDataSource недоступны, потому что эту команду нельзя использовать в режиме чтения. И действительно word запускаться в режиме чтения
Защищенный просмотр все галки сняты |
Цитата:
Цитата:
Код:
Set objDocument = objWord.Documents.Open("C:\Мои проекты\0136\order.doc", , True) Код:
Set objDocument = objWord.Documents.Open("C:\Мои проекты\0136\order.doc") |
ISKA, большое спасибо!!!
скрипт работает office 2003/2007/2013/2016 Скрытый текст
Код:
<job> |
mcintosh55, так… Это уже хорошо. Теперь двигаемся дальше.
1. Как я понимаю, Вам сие придётся проделывать достаточно регулярно, так? Как было бы Вам удобнее и проще работать? 2. Существует вполне ненулевая вероятность, что в одном списке окажутся разные люди с полным совпадением ФИО (или даже один и тот же, но с разными постановлениями). Пока это даже никак не проверяется — файл с именем, стоящим ниже по списку просто тупо затрёт ранее созданный файл. Что можно придумать, исходя из исходных данных — что там есть уникального в списке (скажем, тот же номер постановления, нет? |
Цитата:
Я думаю можно по пробовать фио+столбик personal account это число уникальное Код:
strDocumentName = .DataSource.DataFields.Item("SNP" & "_" & "personal account").Value |
Сегодня протестировал скрипт, почему то рандомно он останавливается т.е. может создать новых файлов из всего списка а может и остановиться 10 или 20 или 24 файлов каждый раз по разному
|
Цитата:
Код:
strDocumentName = .DataSource.DataFields.Item("SNP").Value & "_" & .DataSource.DataFields.Item("personal account").Value Цитата:
|
Цитата:
|
mcintosh55, ну, с окнами там работы никакой не ведётся по причине отсутствия такового кода. То, что окна новосозданных документов Word мельтешат в процессе — так я пока специально оставил окно приложения Microsoft Word видимым на случай возникновения ошибок.
mcintosh55, мне вот ещё что подумалось: Вы исполняете .wsf под консольным cscript.exe или под GUI'шным wscript.exe? Я-то всегда работаю под консолью, и у меня именно cscript.exe задан исполнителем (в противовес wscript.exe, используемому по умолчанию). Так вот, под wscript.exe от команд WScript.Echo будут появляться не сообщения в консоли, а окна сообщений, и после появления такого окна сообщения скрипт действительно будет останавливаться до тех пор, пока будет это окно сообщения не будет закрыто. |
Код:
strDocumentName = .DataSource.DataFields.Item("SNP").Value & "_" & .DataSource.DataFields.Item("personal account").Value Код:
strDocumentName = .DataSource.DataFields.Item("SNP").Value & "_" & .DataSource.DataFields.Item("personal_account").Value через cscript.exe все отлично отрабатывает |
Большое спасибо, Iska!!! Все отлично работает, то что окна открываются закрываются это не страшно.
|
Цитата:
Цитата:
Цитата:
Код:
' objWord.Visible = True |
Цитата:
А так весь функционал хватает. |
Время: 17:10. |
Время: 17:10.
© OSzone.net 2001-