1

Я хотел бы запустить скрипт в каталоге, а затем удалить каталог, подкаталог и файлы.

If(Test-Path -Path $var_InterventionManuelle) {Remove-Item -Recurse -Force $var_InterventionManuelle}

Когда я запускаю командную строку, она работает нормально ... но если кто-то из командной строки находится внутри этого каталога и запускает сценарий, то каталоги и файлы не удаляются. Я просто получаю сообщение об ошибке, так как каталог используется.

Как я могу обойти эту проблему?

1 ответ1

1

Вы можете сделать что-то подобное ниже, чтобы проверить, содержит ли текущий каталог, в котором работает ваш скрипт, $ var_InterventionManuelle.

If(Test-Path -Path $var_InterventionManuelle)
{
    While((Get-Item -path ".\").FullName.Contains($var_InterventionManuelle)) { cd .. }
    Remove-Item -Recurse -Force $var_InterventionManuelle
}

Примером может служить текущий каталог "C:\Temp\Scripts\Blah", а $ var_InterventionManuelle = "C:\Temp", тогда текущий каталог содержит $ var_InterventionManuelle, и он будет возвращаться в C:\.

Очевидно, что если переменная $ var_InterventionManuelle содержит корень диска (например, «C:\») и текущий каталог, в котором выполняется скрипт, находится на диске C:\, цикл while никогда не завершится. Если вы знаете, что переменная $ var_InterventionManuelle НИКОГДА не будет содержать корень диска, это нормально, в противном случае вам придется учитывать это поведение, выполняя что-то вроде этого:

if($var_InterventionManuelle.Split("\")[1].Length -eq 0)
{
    Write-Output "I'm trying to delete the root drive, abort, abort"
    exit
}

Приведенный выше скрипт проверяет, есть ли что-либо после первой косой черты в пути. Например, «C:\» будет разделен на «C:» и «», поэтому второй элемент в массиве будет иметь длину 0. Где "C:\Temp\Blah" будет разделен на "C:", "Temp" и "Blah". В этом случае второй элемент в массиве ("Temp") будет иметь длину 4, которая не равна 0 ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .