Компьютерный форум 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=158854)

volk1234 01-12-2009 23:22 1284648

Надо сделать вывод пути в файл
 
Привет гуру скриптонаписательства!

Вопрос из раздела - сделайте за меня, но честно - ввод вывод в файлы - не освоил.

Есть скрипт допустим для копрования настроек 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 менялся из скрипта/

NiOl 02-12-2009 14:26 1285059

Если я правильно понял задачу - перемещение со своим буком по объектам?

Код:

@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 1285143

Прикольно,

Цитата:

Цитата NiOl
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=
А вторая и др ?...

NiOl 02-12-2009 18:40 1285245

1. Действительно ищет "source", не просто, а с игнорированием регистра, и выдает номер строки в текстовом файле в %N%
2,3. Цикл выбирает из текстовика все строки
4. Обратный отсчет строк
5. Если это нужная строка, то в ней будет лежать нужный путь
6. Вывод строки во временный файл

amel27 03-12-2009 11:25 1285744

если есть возможность в исходном файле переместить строку с переменным параметром в конец файла, то для формирования нужного INI достаточно будет что-нить типа "Echo Source=\\Wall\$DWUPd\ >>drwu.ini"

volk1234 03-12-2009 15:40 1285941

В том то и дело - что нехотелось бы менять порядок параметров в ini файле;
Можно былобы вообще сделать несколько файлов с нужными настройками и в зависимости от выбора копировать нужный -
но это же неэстэтично :)

Я думал что есть какая нибудь команда работы с ini файлами как в inf-файлах вроде
"Echo \\Wall\$DWUPd\ >>drwu.ini>>Source="

amel27 04-12-2009 11:00 1286516

Цитата:

Цитата volk1234
нехотелось бы менять порядок параметров в ini файле »

обычно от перерестановки секций в пределах INI-файла и/или параметров в пределах секции смысл INI-файла не меняется... разве только его использует какая-то совсем неправильная программа

Цитата:

Цитата volk1234
Я думал что есть какая нибудь команда работы с ini файлами как в inf-файлах »

а что, есть такая команда для INF-файлов?

volk1234 04-12-2009 12:09 1286570

Цитата:

Цитата amel27
а что, есть такая команда для INF-файлов? »

http://www.oszone.net/3827#ini

Ок. Попробую. Способ с выводом через >> действительно проще и главное я им пользовался, просто хотелось не менять структуру файла.
Но и NiOl спасибо.

volk1234 04-12-2009 15:40 1286742

Только единственный момент таким способом не изменишь существующий INI файл - ведь там уже есть одна запись
Source=
получится конфликт путей.

gora 04-12-2009 16:17 1286774

Разделите файл drwu.ini на две части:

- drwu1.ini
Цитата:

Цитата volk1234
[DrWU]
Language=Russian
Boot=1
......................................
»

- drwu2.ini
Цитата:

Цитата volk1234
.....................
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 1286858

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



Время: 11:43.

Время: 11:43.
© OSzone.net 2001-