Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Без раскрытия системной переменной окружения

Ответить
Настройки темы
CMD/BAT - [решено] Без раскрытия системной переменной окружения

Новый участник


Сообщения: 23
Благодарности: 4

Профиль | Отправить PM | Цитировать


Здравствуйте. Есть текстовый reg-файл, со сточками, содержащими системные переменные, например:
@="\"%ProgramFiles%\\FastStone Image Viewer\\FSViewer.exe\" \"%1\""
Нужно заменить %ProgramFiles% на %ProgramFiles(x86)%. При замене с использованием батника, системные переменные раскрываются и получается:
@="\"C:\Program Files(x86)\\FastStone Image Viewer\\FSViewer.exe\" \"\""
А надо:
@="\"%ProgramFiles(x86)%\\FastStone Image Viewer\\FSViewer.exe\" \"%1\""

Батник, найденный в просторах Интернета, такой:
for /f "tokens=*" %%a in ('more^<reg.reg') do call :_replace "%%a"
goto eof
:_replace
set i=%*
set i=%i:Program Files=Program Files(x86)%
echo %i%>>new.txt
goto eof
:eof

Отправлено: 11:38, 08-02-2014

 

Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Код: Выделить весь код
  > reg add "hkcu\test" /v test /d "\"^%ProgramFiles(x86)^%\"" /f
Операция успешно завершена.                                      
                                                                 
  > reg query hkcu\test                                          
                                                                 
HKEY_CURRENT_USER\test                                           
    test    REG_SZ    "%ProgramFiles(x86)%"

 > reg add "hkcu\test" /v test /d "\"^%ProgramFiles(x86)^%\FastStone Image Viewer\FSViewer.exe\" \"%1\"" /f
Операция успешно завершена.

 > reg query hkcu\test

HKEY_CURRENT_USER\test
    test    REG_SZ    "%ProgramFiles(x86)%\FastStone Image Viewer\FSViewer.exe" "%1"

Последний раз редактировалось Foreigner, 08-02-2014 в 12:49.


Отправлено: 12:42, 08-02-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 23
Благодарности: 4

Профиль | Отправить PM | Цитировать


Тогда как будет выглядеть батник, получающий исходный (большой) reg-файл содержащий системные переменные и выдающий другой reg-файл, в котором конкретные системный переменные или другой текст заменен на другие системные переменные или текст?

Отправлено: 13:53, 08-02-2014 | #3


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Именно батник? В чистом виде он не слишком приспособлен для обработки текста. С помощью sed:
Код: Выделить весь код
@echo off
setlocal

set "f=1.reg"
set "s=ProgramFiles%%"
set "r=ProgramFiles(x86)%%"

1>reg.tmp sed "s/%s%/%r%/g" "%f%"
move reg.tmp "%f%"
ЗЫ. reg-файл должен быть ANSI

Отправлено: 15:30, 08-02-2014 | #4


Новый участник


Сообщения: 23
Благодарности: 4

Профиль | Отправить PM | Цитировать


Вообще, разрешено использовать только средства Windows, отдавая предпочтение батникам. Видимо, придется обратиться к JavaScript, если не смогу обойтись батником.

Отправлено: 16:44, 08-02-2014 | #5


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Так работает:

Код: Выделить весь код
@echo off
 for /f %%i in ('find /c /v ""^<"reg.reg"') do set n=%%i
(
 for /l %%i in (1 1 %n%) do (
  set string=
  set /p string=
  if defined string (
   call set /p="%%string:Program Files=Program Files(x86)%%"<nul
    if %%i==%n% (
     goto:eof
   )
  )
  echo.
 )
)<"reg.reg">"new.txt"

Отправлено: 17:50, 08-02-2014 | #6


Новый участник


Сообщения: 23
Благодарности: 4

Профиль | Отправить PM | Цитировать


Вот что выводит в new.txt:
Код: Выделить весь код
D:\System\Flash\Utils\!!! - Copy\FastStone Image Viewer 4.9\Data>(
set string=  
 set /p string=  
 if defined string (
call set /p="%string:Program Files=Program Files(x86)%" 0<nul  
 if 1 == 1 (goto:eof) 
)  
 echo.
) 
ю

Отправлено: 22:37, 08-02-2014 | #7


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Не надо пренебрегать командой
Код: Выделить весь код
@echo off
. Она в моём коде не для красоты.

Отправлено: 22:59, 08-02-2014 | #8


Новый участник


Сообщения: 23
Благодарности: 4

Профиль | Отправить PM | Цитировать


C echo off выводил это:
Код: Выделить весь код
ю@
Поэтому и попробовал убрать.

Вот здесь он запоминает неправильное значение числа строк:
Код: Выделить весь код
for /f %%i in ('find /c /v ""^<"reg.reg"') do set n=%%i
В n помещается '---------'.
Набираю в командной строке
Код: Выделить весь код
find /c /v "^<" reg.reg
Получаю
Код: Выделить весь код
---------- REG.REG: 2

Отправлено: 23:15, 08-02-2014 | #9


Новый участник


Сообщения: 23
Благодарности: 4

Профиль | Отправить PM | Цитировать


Итить!! Верхний пост невнимательно прочитал! Действительно, был в Unicode. Теперь выводит.
Вот эту строчку не смог понять:
Код: Выделить весь код
)<"reg.reg">"new.txt"
Можете объяснить?

Отправлено: 23:35, 08-02-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Без раскрытия системной переменной окружения

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Реализация функций длины переменной, выделение подстроки с параметрами в переменной. NiOl Скриптовые языки администрирования Windows 7 31-01-2019 19:58
CMD/BAT - [решено] В переменной содержится имя переменной opravdin Скриптовые языки администрирования Windows 3 28-01-2013 11:11
CMD/BAT - поиск файла по путям, заданным в произвольной переменной окружения CyberMuesli Скриптовые языки администрирования Windows 4 25-06-2012 14:23
Интернет - Tor выдает предупреждение о опасности раскрытия? torrent Программное обеспечение Windows 0 29-03-2012 08:25
[решено] Возможность изменить значение переменной без перезапуска скрипта sashadeg AutoIt 3 13-04-2009 19:14




 
Переход