我想在目录中运行脚本,然后删除该目录、子目录和文件。
If(Test-Path -Path $var_InterventionManuelle) {Remove-Item -Recurse -Force $var_InterventionManuelle}
当我运行命令行时,它工作正常……但如果有人从命令行进入该目录并运行脚本,则目录和文件不会被删除。我只是收到一个错误,因为目录正在使用中。
我怎样才能绕过这个问题?
答案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...