|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Создание нескольких однотипных файлов |
|
CMD/BAT - [решено] Создание нескольких однотипных файлов
|
Новый участник Сообщения: 22 |
Здравствуйте. Возникли затруднения с написанием необходимого bat файла.
Имеются два текстовых файла: ADBook.txt и Template.txt. В ADBook хранятся имена пользователей и названия id файлов. В Template.txt хранится шаблон, на основе которого создается необходимый файл setup.txt. Скрипт должен создавать отдельный файл setup.txt для каждого пользователя. Файл ADBook Файл Template.txt Username=%usrnm% KeyfileName=C:\IBM\Lotus\Notes\Data\%idfl% Domino.Name=server Domino.Server=1 AdditionalServices=-1 IM.Server=fakeservername IM.Port=80 IM.Protocol=1 1. Так как в имени пользователя содержатся пробелы, то что идет после первого из них откидывается. Как этого избежать? 2. Файлов должно быть большое количество, больше сотни. Можно ли сделать так, чтобы при создании файла создавалась и папка с именем пользователя, куда скрипт положит получившийся файл? Заранее благодарен за помощь |
|
Отправлено: 11:25, 19-04-2013 |
Ветеран Сообщения: 1758
|
Правильно поставленный вопрос -- половина решения. Мне не все ясно, в частности с id, вот додумал сам:
@echo off setlocal for /f "tokens=1 delims=/" %%i in (adbook.txt) do call:1 "%%i" goto:eof :1 if not defined name ( set "name=%~1" md "D:\test\%~1" ) else ( 1>"D:\test\%name%\setup.txt" ( echo Username=%name% echo KeyfileName=C:\IBM\Lotus\Notes\Data\%~1 echo Domino.Name=server echo Domino.Server=1 echo AdditionalServices=-1 echo IM.Server=fakeservername echo IM.Port=80 echo IM.Protocol=1 ) set "name=" ) |
Отправлено: 19:03, 19-04-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Liquid Ocelot,
примерно так: SET VAR1="%%J\setup.txt" SETLOCAL ENABLEDELAYEDEXPANSION FOR /F "skip=2 tokens=1,2* delims=[]/" %%I IN ('FIND /N " " ADBook.txt') DO ( IF NOT EXIST "%%J" MD "%%J" ECHO Username=%%J/%%K>%VAR1% SET /A VAR2=%%I+1 FOR /F "skip=2 tokens=1* delims=[]" %%L IN ('FIND /N "." ADBook.txt') DO ( IF %%L==!VAR2! ECHO KeyfileName=C:\IBM\Lotus\Notes\Data\%%M>>%VAR1%&&^ ECHO Domino.Name=server>>%VAR1%&&^ ECHO Domino.Server=^1>>%VAR1%&&^ ECHO AdditionalServices=-1>>%VAR1%&&^ ECHO IM.Server=fakeservername>>%VAR1%&&^ ECHO IM.Port=80>>%VAR1%&&^ ECHO IM.Protocol=^1>>%VAR1% )) PAUSE Если что не так, попробуем доработать. |
Отправлено: 22:15, 19-04-2013 | #3 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать @Echo Off Set template=template.txt Set ADBook=ADBook.txt Set Setup=Setup.txt SetLocal EnableExtensions EnableDelayedExpansion Set L=1 FOR /F "usebackq delims=/" %%s IN ("%ADBook%") DO ( If !L!==1 ( Set usrnmx=%%s&Set L=2 ) Else ( Set idflx=%%s&Set L=1 Call :Bat "!usrnmx!" "!idflx!" ) ) del "%template%.bat" 2>nul GoTo :Eof :Bat Set usrnm=%~1 Set idfl=%~2 MD "%~n2" 2>nul del "%~n2\%Setup%" 2>nul del "%template%.bat" 2>nul FOR /F "usebackq delims=" %%i IN ("%template%") DO Echo Echo^>^>"%~n2\%Setup%" %%i>>"%template%.bat" Call "%template%.bat" GoTo :Eof |
------- Отправлено: 00:36, 20-04-2013 | #4 |
Новый участник Сообщения: 22
|
Профиль | Отправить PM | Цитировать Спасибо большое за помощь, господа. Все скрипты работают, но у Foreigner и megaloman почему-то откидывается часть имени — "/DOM/ORG/RU". Не уверен, насколько это будет критично для инсталлятора софта, проверить смогу только на работе, увы. Тем не менее, ещё раз спасибо!
|
|
Отправлено: 11:08, 20-04-2013 | #5 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата Liquid Ocelot:
![]() "Ivan A Ivanov#DOM#ORG#RU" , при этом надо заменить кусок кода Вообще при решении я ставил целью, чтобы батник работал именно с файлами ADBook.txt и Template.txt, без включения их содержимого в код запускаемого пользователем батника. Подозреваю, можно сделать элегантнее. |
|
------- Последний раз редактировалось megaloman, 20-04-2013 в 13:51. Отправлено: 13:04, 20-04-2013 | #6 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
чтобы имя папки визуально отображалось по типу "Ivan A Ivanov/DOM/ORG/RU", можно скриптом создать в каждой папке файл desktop.ini с содержимым типа и атрибутировать (для Windows XP необязательно) зти папки как только для чтения: Но, по-моему, это излишне. |
|
Последний раз редактировалось Georgio, 20-04-2013 в 15:19. Причина: Незначительное изменение оформления Отправлено: 14:45, 20-04-2013 | #7 |
Новый участник Сообщения: 22
|
Профиль | Отправить PM | Цитировать megaloman, я имел в виду, что в конечном файле, т.е. в setup.txt в строке Username=Ivan A Ivanov нет /DOM/ORG/RU. Имена папок, которые создает ваш скрипт, меня устраивают :>
Прошу прощения, за неточные формулировки своих сообщений :< |
Отправлено: 16:05, 20-04-2013 | #8 |
Новый участник Сообщения: 22
|
Профиль | Отправить PM | Цитировать megaloman, да всё работает. Большое спасибо!
|
Отправлено: 17:22, 20-04-2013 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Создание одного файла из нескольких | ajakzs | Скриптовые языки администрирования Windows | 4 | 04-03-2012 19:39 | |
CMD/BAT - [решено] Создание папок по дате получения файлов и перемещение в них файлов | KamikadZZe | Скриптовые языки администрирования Windows | 1 | 01-09-2011 14:15 | |
CMD/BAT - [решено] Обработка нескольких файлов | laipisas02 | Скриптовые языки администрирования Windows | 8 | 15-03-2010 15:43 | |
Загрузка - Создание на флэшкe загрузчика для нескольких систем | sitop | Microsoft Windows Vista | 8 | 06-04-2009 23:06 | |
[решено] Создание нескольких доменов на одном физическом сервере? | alexws | Microsoft Windows NT/2000/2003 | 4 | 21-11-2005 17:50 |
|