2013-03-01 2 views
1

Я новичок в партиях. Я пытаюсь отредактировать строку в файле, используя пакет. Однако строка содержит пробелы и зарезервированные знака (= знак) В принципе, я хочу, чтобы изменить PasswordComplexity = 1 к PasswordComplexity = 0, который находится в файле с именем export.cfg Все идеи оценили, вот что я сейчас:Как найти и заменить строку с зарезервированными символами и пробелами

setlocal enabledelayedexpansion 

FOR /F "usebackq delims=" %%a IN ("export.cfg") DO (
set "line=%%a" & echo !line:(PasswordComplexity = 1)=(PasswordComplexity = 0)! 
)>>"import.cfg" 

ответ

1

К сожалению, знаки равенства = не может быть просто заменен только родными решениями для Windows. См https://stackoverflow.com/a/9561827/891976

Если строка, содержащая PasswordComplexity имеет только одну цифру, вы можете сделать что-то вроде этого:

setlocal EnableExtensions EnableDelayedExpansion 

for /f "usebackq delims=" %%A in ("export.cfg") do (
    set "line=%%A" 
    set "found=false" 
    for /f "delims=" %%B in (echo %%A^|find "PasswordComplexity = 1") do set "found=true" 
    if !found!==true (
     echo !line:1=0! 
    ) else (
     echo !line! 
    ) 
)>>"import.cfg" 

endlocal 

отметить также, что всякий раз, когда с помощью специальных символов буквально за пределами кавычек, они должны быть экранированы. См. http://www.robvanderwoude.com/escapechars.php

+0

Хорошая попытка, но неправильно! Выступающая скобка не нуждается в побеге, закрытие делает, но равное не может быть экранировано в выражении repalce. Знак равенства не может быть заменен таким образом – jeb

+0

David and jeb: спасибо большое за ответ -bd – Dito

Смежные вопросы