Моя проблема в том, что строка для замены должна меняться в зависимости от глубины папки, в которой находится указанный файл, и я не имею понятия, как получить эту информацию.Мне нужно работать с относительными адресами.
Я хочу, чтобы скрипт запускался с двух уровней папок над папкой, где находятся все файлы, которые нужно исправить.Итак, я установил $ path в строке 1. Предполагается, что эта папка имеет значение «Глубина 0».Здесь, строка замены должна быть в своем собственном виде -> stylesheet.css
.
Для файлов в папках на один уровень ниже «глубины 0» строка для замены должна иметь префикс ../
один раз.-> ../stylesheet.css
.
Для файлов в папках, расположенных на два уровня ниже «глубины 0», строка для замены должна начинаться с префикса ../
дважды -> ../../stylesheet.css
.... и так далее ...
Я застрял здесь:
$depth = $file.getDepth($path) #> totally clueless here
Мне нужно $depth
, чтобы содержать количество папок под корнем $path
.
Как я могу получить это? Вот остаток моего кода:
$thisLocation = Get-Location
$path = Join-Path -path $thisLocation -childpath "\Files\depth0"
$match = "findThisInFiles"
$fragment = "stylesheet.css" #> string to be prefixed n times
$prefix = "../" #> prefix n times according to folder depth starting at $path (depth 0 -> don't prefix)
$replace = "" #> this will replace $match in files
$depth = 0
$htmlFiles = Get-ChildItem $path -Filter index*.html -recurse
foreach ($file in $htmlFiles)
{
$depth = $file.getDepth($path) #> totally clueless here
$replace = ""
for ($i=0; $i -lt $depth; $i++){
$replace = $replace + $prefix
}
$replace = $replace + $fragment
(Get-Content $file.PSPath) |
Foreach-Object { $_ -replace $match, $replace } |
Set-Content $file.PSPath
}