GCRaistlin
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору korosya Цитата: SETLOCAL ENABLEDELAYEDEXPANSION FOR /F "Tokens=1,2,3* Delims=," %%a IN (file.ini) DO ( SET "PathReg=%%~a" | Я уже не раз тут писал: если на входе в FOR delayed expansion включен и нет гарантии, что for-переменные не содержат восклицательных знаков, его нужно выключить перед работой с for-переменными. В вашем случае: если %%~a разворачивается в "HKCU\!abrakadabra!", то PathReg будет не "HKCU\!abrakadabra!", как вы ожидаете, а "HKCU\". Вот подпрограмма, которая эскейпит все нужные символы (зачем множить сущности?): Код: :EscapeChars <Var> rem Delayed expansion should be enabled before calling the subroutine if not "%SystemRoot%" == "!SystemRoot!" ( echo. echo [%0] Error: delayed expansion disabled. exit /b -1 ) set Prm=%1 if not defined Prm exit /b -1 set MaxLen=255 if defined Ct set Ct= if defined Pos set Pos= for /l %%A in (0,1,%MaxLen%) do ( set Chr=!%1:~%%A,1! if not defined Chr ( set /a Len=%%A-1 goto :EndFor ) if """" == "!Chr!!Chr!" ( set /a Ct+=1 ) else ( if "&&" == "!Chr!!Chr!" ( set /a Rmndr=Ct%%2 if 1 == !Rmndr! set Pos=!Pos! %%A ) ) ) set Len=%MaxLen% :EndFor if defined Shift set Shift= for /l %%A in (0,1,%Len%) do ( set /a RealPos=%%A+Shift for %%B in (!RealPos!) do ( set Chr=!%1:~%%B,1! if """" == "!Chr!!Chr!" color 00 if not errorlevel 1 if "\\" == "!Chr!!Chr!" color 00 if errorlevel 1 ( set %1=!%1:~,%%B!\!%1:~%%B! set /a Shift+=1 ) else ( if "&&" == "!Chr!!Chr!" ( for %%C in (%Pos%) do ( if %%C == %%A ( set %1=!%1:~,%%B!^^^^!%1:~%%B! set /a Shift+=1 ) ) ) ) ) ) exit /b | NB: перед ее вызовом нужно включить delayed expansion. И проверяйте код возврата - ненулевой означает ошибку. Добавлено: Вот только не знаю, нужно ли отключать delayed expansion перед записью строки в файл. Если что, то так: Код: ( endlocal >>config.txt ECHO RunProgram="hidcon:REG ADD \"%PathReg%\"%Param%%Type%%Value% /F" ) |
---------- Magically yours Raistlin |
| Всего записей: 3999 | Зарегистр. 18-04-2005 | Отправлено: 00:56 24-01-2015 | Исправлено: GCRaistlin, 02:38 24-01-2015 |
|