自毁目录


1

我想在目录中运行脚本,然后删除目录,子目录和文件。

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

当我运行命令行时,它工作正常……但是,如果有人从命令行进入该目录并运行脚本,则不会删除目录和文件。由于目录正在使用中,我只是收到一个错误。

我该如何绕过这个问题?


检查您所在的目录,如有必要,请更改为另一个目录?
DavidPostill

不幸的是,这种愚蠢只是Windows运行的方式。它不会让您删除任何进程已打开的文件。
psusi 2014年

Answers:


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,并将其一直cd到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 ”和“布拉”。在这种情况下,数组中的第二项(“临时”)的长度为4,而不是0 ...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.