PowerShell с использованием переменных в строках, передаваемых в качестве параметров - PullRequest
3 голосов
/ 08 августа 2011

У меня есть несколько файлов php в каталоге, я хочу заменить несколько слов во всех файлах другим текстом. Это часть моего кода:

$replacements_table=
("hr_table", "tbl_table"),
('$users', "tbl_users")

foreach ($file in $phpFiles){
    foreach($replacement in $replacements_table){
        (Get-Content $file) | Foreach-Object{$_ -replace $replacement} | Set-Content $file 
    }
}

Он отлично работает для замены «hr_table», но совсем не работает для «$ users». Любое предложение было бы неплохо

Ответы [ 4 ]

4 голосов
/ 08 августа 2011

Строка на самом деле является регулярным выражением и поэтому должна быть экранирована с помощью '\'.См. эта тема

$replacements_table= ("hr_table", "tbl_table"), ('\$users', "tbl_users")

будет работать.

2 голосов
/ 08 августа 2011

Знак доллара - это специальный символ регулярного выражения, совпадает с концом строки, его необходимо экранировать.Экранирование символа в регулярном выражении выполняется символом «\» перед символом, которого вы хотите экранировать.Более безопасный метод экранирования символов (особенно если вы не знаете, может ли строка содержать специальные символы) - использовать метод Escape.

$replacements_table= (hr_table', 'tbl_table'), ([regex]::Escape('$users'), 'tbl_users')
1 голос
/ 08 августа 2011

Попробуйте экранировать "$" с обратной косой чертой: '\$users' Символ $ указывает, что регулярное выражение должно совпадать в конце строки. Обратная косая черта является escape-символом регулярного выражения.

0 голосов
/ 08 августа 2011

попробуйте использовать двойные кавычки вокруг имени переменной вместо одинарных кавычек

EDIT

Попробуйте что-нибудь в этом роде ....

$x = $x.Replace($originalText, '$user')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...