Powershell заменяет путь к файлу, который содержит - PullRequest
0 голосов
/ 06 июня 2018

У меня есть файл .txt, в котором содержатся некоторые важные вещи.Одним из них является путь к месту, где я храню некоторые файлы.Этот путь используется в двух местах в этом файле .txt.

"path" : "D:\\final_test\\abc"

«abc» - это имя каталога, и все время оно будет другим, поэтому я хотел бы заменить этот путь, используяget-content и powershell.

Я мало пробовал, и когда я делаю что-то подобное

powershell -Command "(gc test.txt) -replace 'abc', 'XYZ' | Out-file test.txt

, все работает, но когда я делал что-то подобное

powershell -Command "(gc test.txt) -replace 'D:\\final_test\\abc', 'D:\\final_test\\XYZ' | Out-file test.txt

или что-то в этом роде

powershell -Command "(gc test.txt) -replace '^D:\\final_test\\.*$', 'D:\\final_test\\XYZ' | Out-file test.txt

не будет работать (ничего не изменилось в .txt файле).

Конечно, лучшим способом будет заменить "D: \\ final_test\\ .... "(независимо от того, что будет после" final_test \\ ").

Можете ли вы помочь мне с этим как-нибудь?Я не уверен, но похоже, что есть какая-то проблема со знаком "обратная косая черта".

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Поскольку символ обратной косой черты является escape-символом в регулярных выражениях, вы должны удвоить их в первой части команды -replace.Это должно работать:

powershell -Command "(gc test.txt) -replace 'D:\\\\final_test\\\\abc', 'D:\\final_test\\XYZ' | Out-file test.txt
0 голосов
/ 06 июня 2018

Функция -replace использует регулярные выражения, поэтому вам нужно экранировать некоторые символы регулярного выражения.В любом случае, это регулярное выражение, которое я бы использовал:

(Get-Content .\test.txt) -replace '(?<="path" : ")[^"]+',  'D:\\final_test\\XYZ' | Set-Content test.txt
0 голосов
/ 06 июня 2018

Я не совсем уверен, какую часть пути вы хотите изменить, но попробуйте это?

powershell -Command "(gc test.txt) -replace '^D:\\final_test\\', 'D:\New_Name\' | Out-file test.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...