我正在尝试让PowerShell 5.1脚本自行删除,以及整个文件夹内容(包括子文件夹(。我正在使用下面的代码,它在一定程度上起作用。它确实删除了文件夹的所有内容(包括PowerShell脚本(,但它确实NOT删除了文件夹本身。
script.ps1
:
# Main code
# At end of script
Invoke-Expression -Command "cmd.exe /c rmdir `"C:test`" /s /q"
运行以上代码后,C:test
仍然存在,但为空。如何让脚本也删除文件夹?
附加说明
我也尝试在脚本末尾使用Remove-Item -Path "C:test" -Force -Recurse
,但它会产生以下错误:Remove-Item : Cannot remove the item at 'C:test' because it is in use.
我发现当使用Remove-Item
来删除脚本本身时,这是一个已知的问题。
我找到了解决方案。我尝试使用Start-Process
,它完全创建了一个单独的过程。我还发现不要将-NoNewWindow
开关与它一起使用,否则我会得到与Invoke-Expression
相同的结果。
以下代码工作,删除整个文件夹内容和文件夹本身:
Start-Process -FilePath "cmd.exe" -ArgumentList "/c `"cd c: & rmdir C:test /s /q`""
我假设文件script.ps1
位于应该删除的路径c:test
中,因此只要脚本正在运行,文件夹就在使用中。因此,我会在脚本的最后创建一个PowerShell作业,等待几秒钟,然后删除该文件夹。
Start-Job -Name RemoveFolder -ScriptBlock {Start-Sleep 2;Remove-Item -LiteralPath 'C:test' -Force -Recurse}