Показать полную графическую версию : Надо сделать вывод пути в файл
volk1234
01-12-2009, 23:22
Привет гуру скриптонаписательства!
Вопрос из раздела - сделайте за меня, но честно - ввод вывод в файлы - не освоил.
Есть скрипт допустим для копрования настроек DRWU - с указанием сервера обновлений drweb.
Также в папке лежит файл drwu.ini следующего содержания:
[DrWU]
Language=Russian
Boot=1
......................................
Source=\\Wall\$DWUPd\
.....................
Destination=C:\Documents and Settings\All Users\Application Data\Doctor Web\Bases\
...........
Желание какое - сделать универсальный скрипт для разных организаций -
Допустим буду выбирать 1- организация А \\server1\dw\
2- организация А \\dom1\serv\drw\bases
Хотелось бы не меняя структуры файла drwu.ini в зависимости от выбранной организации подставлять соответствующий путь.
то есть надо, чтобы параметр Source= в файле drwu.ini менялся из скрипта/
Если я правильно понял задачу - перемещение со своим буком по объектам?
@Echo off
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion
del /f %0_tmp
rem Список сетевых ресурсов. При добавлении переменная должна называться PthN, где N - номер из меню ниже
set INI=drwu.ini
set Pth1=\\server1\dw\
set Pth2=\\datacenter\db\anti\drweb\update\
set Pth3=\\dom1\serv\drw\bases\
set Pth4=\\Vasya\D$\DrWebBases\
rem Выбрать место можно через параметр
set N=%1
if not "%N%"=="" Goto Check
:Menu
Echo Мы сейчас находимся в:
Echo ========================
Echo.
Echo 1) ООО "Дудка"
Echo 2) ЗАО "Навоз"
Echo 3) Дома
Echo 4) В гостях у Васи Пупкина
Echo.
Echo.
set /P N="Укажите номер и [Enter] ^>"
:Check
Set Pth=!Pth%N%!
if "%Pth%"=="" (cls
Echo Нет такого пункта меню "%N%"
Echo.
Goto Menu
)
for /f "tokens=1 delims=:" %%N in ('findstr /n /i "source" %INI%') do set N=%%N
for /f "tokens=1* delims=" %%L in (%INI%) do (
set L=%%L
set /a N-=1
if !N!==0 set L=Source=%Pth%
echo !L!>>%0_tmp
)
del /f %INI%
copy /y %0_tmp %INI%
del /f %0_tmp
volk1234
02-12-2009, 16:34
Прикольно,
for /f "tokens=1 delims=:" %%N in ('findstr /n /i "source" %INI%') do set N=%%N
for /f "tokens=1* delims=" %%L in (%INI%) do (
set L=%%L
set /a N-=1
if !N!==0 set L=Source=%Pth%
echo !L!>>%0_tmp »
а можно поподробнее - что делают эти параметры.
Первый цикл ищет строку с source=
А вторая и др ?...
1. Действительно ищет "source", не просто, а с игнорированием регистра, и выдает номер строки в текстовом файле в %N%
2,3. Цикл выбирает из текстовика все строки
4. Обратный отсчет строк
5. Если это нужная строка, то в ней будет лежать нужный путь
6. Вывод строки во временный файл
если есть возможность в исходном файле переместить строку с переменным параметром в конец файла, то для формирования нужного INI достаточно будет что-нить типа "Echo Source=\\Wall\$DWUPd\ >>drwu.ini"
volk1234
03-12-2009, 15:40
В том то и дело - что нехотелось бы менять порядок параметров в ini файле;
Можно былобы вообще сделать несколько файлов с нужными настройками и в зависимости от выбора копировать нужный -
но это же неэстэтично :)
Я думал что есть какая нибудь команда работы с ini файлами как в inf-файлах вроде
"Echo \\Wall\$DWUPd\ >>drwu.ini>>Source="
нехотелось бы менять порядок параметров в ini файле »
обычно от перерестановки секций в пределах INI-файла и/или параметров в пределах секции смысл INI-файла не меняется... разве только его использует какая-то совсем неправильная программа
Я думал что есть какая нибудь команда работы с ini файлами как в inf-файлах »а что, есть такая команда для INF-файлов?
volk1234
04-12-2009, 12:09
а что, есть такая команда для INF-файлов? »
http://www.oszone.net/3827#ini
Ок. Попробую. Способ с выводом через >> действительно проще и главное я им пользовался, просто хотелось не менять структуру файла.
Но и NiOl спасибо.
volk1234
04-12-2009, 15:40
Только единственный момент таким способом не изменишь существующий INI файл - ведь там уже есть одна запись
Source=
получится конфликт путей.
Разделите файл drwu.ini на две части:
- drwu1.ini[DrWU]
Language=Russian
Boot=1
......................................
»
- drwu2.ini.....................
Destination=C:\Documents and Settings\All Users\Application Data\Doctor Web\Bases\
...........
»
В скрипт, после выбора варианта, добавьте:Copy /Y drwu1.ini drwu.ini
Echo Source=\\Wall\$DWUPd\>>drwu.ini
Copy /A drwu.ini + drwu2.ini drwu.ini
El Sanchez
04-12-2009, 17:55
volk1234, так создайте единый шаблон drwu.ini, где значением параметра Source будет, например, символ точки (Source=.), а сценарий эту точку заменит на путь. Пример такого сценария (NiOl, взял переменные из вашего примера):
@echo off
set INI=drwu.ini
set Pth1=\\server1\dw\
set Pth2=\\datacenter\db\anti\drweb\update\
set Pth3=\\dom1\serv\drw\bases\
set Pth4=\\Vasya\D$\DrWebBases\
echo ===============================================================================
echo Мы сейчас находимся в:
echo.
echo 1. ООО "Дудка"
echo 2. ЗАО "Навоз"
echo 3. Дома
echo 4. В гостях у Васи Пупкина
echo 5. Выход.
echo ===============================================================================
:labelMenu
set /p "ans= Ваш выбор: "
set charerr=%ans%
set /a charerr=charerr*1 1>nul
if /i not "%charerr%"=="%ans%" (echo Ахтунг!!! Сработала защита Антидурак v1.01. Не то набрали!!! Пробуйте еще.&goto :labelMenu)
if %charerr% lss 1 (echo Ахтунг!!! Сработала защита Антидурак v1.01. Не то набрали!!! Пробуйте еще.&goto :labelMenu)
if %charerr% gtr 5 (echo Ахтунг!!! Сработала защита Антидурак v1.01. Не то набрали!!! Пробуйте еще.&goto :labelMenu)
if %charerr% equ 5 goto :eof
setlocal ENABLEDELAYEDEXPANSION
call :parse "!Pth%ans%!"
del /f %ini%
copy /y tmp %ini%
del /f tmp
goto :eof
:parse
for /f "tokens=*" %%a in (%ini%) do (
set str=%%a
if "!str!"=="Source=." (echo !str:.=%~1!>>tmp) else (echo !str!>>tmp)
)
goto :eof
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.