Как вытащить путь из реестра и подставить его в нужное место?
День добрый.
Сейчас мозгую на тем чтобы сделать скрипт который будет брать путь из реестра:
[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home2]
"ORACLE_HOME"="C:\\app\\username\\product\\11.2.0\\client_2"
к этому пути подставлять "\network\admin\" и копировать туда файл с заменой.
Need help/
|
Код:
set $file=c:\TEST\file.txt
set $rkey=HKLM\SOFTWARE\ORACLE\KEY_OraClient11g_home2
for /f "tokens=2*" %%a in ('reg query "%$rkey%" /v ORACLE_HOME^|Find "REG_SZ"') do set "$path=%%b"
copy /y "%$file%" "%$path%\network\admin\"
|
@echo off
set reg_path=hkcu\Console
set reg_param=WindowSize
reg query "%reg_path%" /v "%reg_param%" >1.txt
for /F "tokens=1,2,3" %%a in (1.txt) do if "%%a"=="%reg_param%" set reg_value=%%c
echo %reg_value%
Пусть вытащили, как теперь подсунуть к нему "\network\admin" ?
|
amel27
Бооольшое спасибо )
|
Привет всем.
Не стал создавать новую тему, вопрос небольшой:
Я сделал скрипт который читает значение ключа реестра
Код:
For /F "Skip=1 Tokens=3*" %%i In ('Reg Query "%Regkey4%" /V TimeZoneKeyName') Do Set TZKN=%%i%%j
Echo %TZKN%
Pause
все успешно, но ключ состоит из трех слов разделенных пробелом: Standart Russian Time.
В переменную он передается в виде StandartRussian Time, т.е. два первых слова "слиплись". Как их разделить? :)
|
volk1234, желательно приводить полный код, а не огрызок, дабы не надо было додумывать:
Код:
Regkey4=HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Time Zones
Попробуйте так (указав разделителем табуляцию):
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "skip=3 tokens=3 delims= " %%i In ('reg.exe query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Time Zones" /v TimeZoneKeyName') do set TZKN=%%i
if defined TZKN echo %TZKN%
endlocal
exit /b 0
|
El Sanchez |
12-10-2011 21:09 1772040 |
volk1234, поставить пробел Set TZKN=%%i %%j:). Но skip при разборе вывода reg лучше не применять из-за разных версий reg. Чтобы выделить нужную строку в WinXP отфильтровать нужно 3 строки (как в примере Iska), ваш пример для Wn7, т.к. пропускается 1 строка да и разбить вывод надо немного иначе:
Код:
for /f "tokens=2*" %%i in ('Reg Query "%Regkey4%" /V TimeZoneKeyName 2^>nul^|find /i "REG_SZ" 2^>nul') do Set TZKN=%%j
Echo %TZKN%
|
El Sanchez
у Вас ошибка в скрипте- в конце должно быть %%j
|
Цитата:
Цитата El Sanchez
Чтобы выделить нужную строку в WinXP отфильтровать нужно 3 строки (как в примере Iska), ваш пример для Wn7, т.к. пропускается 1 строка да и разбить вывод надо немного иначе: »
|
Угу. Тут не так давно, помнится, рассматривался этот вопрос. Может быть, даже именно Вами.
К сожалению, редко указывают окружение, в котором будет работать скрипт/пакетный файл.
|
Я извиняюсь, что не указал окружение - именно этот пакет должен работать в XP/2003/Vista/7/2008r2.
Я взял предложенный El Sanchez вариант и на Семерке он корректно отработал. Конечно мне надо, чтобы он отрабатывал и на других системах- эта трока самая важная- она определяет часовой пояс с которым работает пользователь и бэкапит его.
Вот полный код скрипта:
читать дальше »
Код:
@Echo off
Rem Belarus timezone change utility(UTC+3 Minsk)
Rem (c) volk1234 01/10/2011
Rem mail to volk1234@mail.ru
Rem v 0.4
:set_start_time
Set start_time=%TIME:~0,-3%
Set start_time=%start_time::=%
Set start_time=%start_time: =0%
Set start_time=%DATE:~-4%%DATE:~3,2%%DATE:~0,2%_%start_time%
Rem Detecting OS,language and current tz registry key name
:DetectEnv
For /F "Skip=1 Tokens=3" %%A In ('Reg Query "HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language" /V InstallLanguage') Do Set OSLang=%%A
For /F "Skip=1 Tokens=3" %%A In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V CurrentVersion') Do Set OSver=%%A
If %OSver% GTR 5.2 (
Set Regkey4=HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
) Else (
Set Regkey4=HKCU\Software\Microsoft\Windows NT\CurrentVersion\Time Zones
)
For /F "Tokens=2*" %%i In ('Reg Query "%Regkey4%" /V TimeZoneKeyName 2^>nul^|find /i "REG_SZ" 2^>nul') Do Set TZKN=%%j
Rem Setting Variables
:TZVARS
Set Regkey1=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\%TZKN%
Set Regkey2=HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
Set TZIdata="4cffffff00000000c4ffffff0000000000000000000000000000000000000000000000000000000000000000"
Set TZIdata2="88ffffff00000000c4ffffff00000a0000000500030000000000000000000300000005000200000000000000"
Set Dllres1="@tzres.dll,-1730"
Set Dllres2="@tzres.dll,-1731"
Set Dllres3="@tzres.dll,-1732"
Set DisplayEn="(UTC+03:00) Minsk"
Set DisplayRu="(UTC+03:00) ЊЁ*бЄ"
Set DltEn=Minsk Daylight Time
Set StdEn=Minsk Standard Time
Set DltRu=ЊЁ*бЄ®Ґ ўаҐ¬п («Ґв®)
Set StdRu=ЊЁ*бЄ®Ґ ўаҐ¬п (§Ё¬*)
Set Backupdir="%TEMP%\TZBY\%start_time%"
Set Regkey3=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\%StdEn%
If %OSLang%==0419 (
Set DLT=%DltRu%
Set STD=%StdRu%
Set DSPL=%DisplayRu%
Goto :Regbackup
)
If %OSLang%==0409 (
Set DLT=%DltEn%
Set STD=%StdEn%
Set DSPL=%DisplayEn%
Goto :Regbackup
)
Exit /b1
Rem Backup regisry
:Regbackup
If Not Exist %Backupdir% MD %Backupdir%
REG EXPORT "%Regkey1%" %Backupdir%\TZ.reg >nul
REG EXPORT "%Regkey2%" %Backupdir%\TZI.reg >nul
Echo @Echo Off>>%Backupdir%\restore_tz.cmd
Echo. >>%Backupdir%\restore_tz.cmd
Echo Regedit /s TZ.reg>>%Backupdir%\restore_tz.cmd
Echo Regedit /s TZI.reg>>%Backupdir%\restore_tz.cmd
Echo Reg Delete "%Regkey3%" /f>>%Backupdir%\restore_tz.cmd
Echo. >>%Backupdir%\restore_tz.cmd
If %OSver% LEQ 5.2 (
Echo Tzchange /c "%TZKN%">>%Backupdir%\restore_tz.cmd
)
If %OSver% GTR 5.2 (
Echo Tzutil /s "%TZKN%">>%Backupdir%\restore_tz.cmd
)
Echo. >>%Backupdir%\restore_tz.cmd
Echo Exit /b0>>%Backupdir%\restore_tz.cmd
Rem Main: making settings for timezone utc +0300 Minsk
:SettingTZ
REG ADD "%Regkey3%" /v Dlt /t REG_SZ /d "%StdRu%" /f >nul
REG ADD "%Regkey3%" /v Std /t REG_SZ /d "%StdRu%" /f >nul
REG ADD "%Regkey3%" /v Display /t REG_SZ /d %DSPL% /f >nul
REG ADD "%Regkey3%\Dynamic DST" /v 2010 /t REG_BINARY /d %TZIdata2% /f >nul
REG ADD "%Regkey3%\Dynamic DST" /v 2011 /t REG_BINARY /d %TZIdata% /f >nul
REG ADD "%Regkey3%\Dynamic DST" /v FirstEntry /t REG_DWORD /d 0x000007da /f >nul
REG ADD "%Regkey3%\Dynamic DST" /v LastEntry /t REG_DWORD /d 0x000007db /f >nul
REG ADD "%Regkey3%" /v TZI /t REG_BINARY /d %TZIdata% /f >nul
If %OSver% GTR 5.2 (
REG ADD "%Regkey3%" /v MUI_Display /t REG_SZ /d %Dllres1% /f >nul
REG ADD "%Regkey3%" /v MUI_Std /t REG_SZ /d %Dllres2% /f >nul
REG ADD "%Regkey3%" /v MUI_Dlt /t REG_SZ /d %Dllres3% /f >nul
REG ADD "%Regkey2%" /v StandardName /t REG_SZ /d %Dllres2% /f >nul
REG ADD "%Regkey2%" /v DaylightName /t REG_SZ /d %Dllres2% /f >nul
REG ADD "%Regkey2%" /v DynamicDaylightTimeDisabled /t REG_DWORD /d 0x00000001 /f >nul
REG ADD "%Regkey2%" /v TimeZoneKeyName /t REG_SZ /d "%StdEn%" /f >nul
tzutil /s "%StdEn%"
)
If %OSver% LEQ 5.2 (
tzchange /c "%StdEn%"
)
Exit /b0
|
El Sanchez |
13-10-2011 15:20 1772496 |
volk1234, спасибо.
volk1234, еще в паре строк skip-ы поубирать.
Цитата:
Цитата Iska
Угу. Тут не так давно, помнится, рассматривался этот вопрос. Может быть, даже именно Вами. »
|
Iska, угу. Было такое, начиная отсюда
|
El Sanchez, спасибо за ссылку.
Цитата:
Цитата volk1234
именно этот пакет должен работать в XP/2003/Vista/7/2008r2. »
|
Тогда лучше перейти на что-нибудь универсальное: WSH, або PowerShell.
|
PowerShell не установлен по умолчанию на ХР 2003, на Висте второго нет по умолчанию...
|
Цитата:
Цитата volk1234
PowerShell не установлен по умолчанию на ХР 2003 »
|
Что мешает поставить?
|
Я в том плане, что тоже не универсальное решение, ведь кто и где будет применять скрипт не знаешь.Cmd везде работает в основном.
Хотя конечно скрипты пишутся для себя и среда их применения обычно известна.
|
volk1234, с cmd проблем предостаточно. Прежде всего в том, что утилиты командной строки от версии к версии меняются, или вовсе отсутствуют (так же: могут быть в Support Tools/Resource Kit, а могут и не быть). Вывод утилит в разных версиях ОС может кардинально отличаться. В одной версии ОС утилита может устанавливать код возврата (по которому можно ориентироваться на результат), в другой версии — нет. Немалые отличия могут быть и в одной версии, но на разных языках… Нет, CMD — самая проблемная технология для подобного ТЗ. Что далеко ходить? Вы же сами об этом пишете в своей статье: Скрипт для изменения часовых поясов Украины, Беларуси и Армении.
Потому, на мой взгляд, лучше стараться использовать такую среду, как WSH или PoSH.
|
Время: 20:12.
© OSzone.net 2001-