在bash中,如果我想为单个命令更改当前目录do_thing,我将生成一个新的子shell,在其中更改目录,运行
(cd folderName; do_thing)
Run Code Online (Sandbox Code Playgroud)
该问题的内容表明,在PowerShell中执行此操作的方法是使用Push-Location存储位置以及Pop-Location命令完成运行后的位置。这行得通,但并不理想:我必须记住Pop-Location在脚本的每个返回点处进行写入(例如,在每个异常之前,如果在按下某个位置时发生异常),则未捕获的异常将照原样保留当前目录。
有没有一种方法可以将当前目录重置为脚本开始时的状态,即使抛出未捕获的异常也是如此?
try...catch...finally 是您要寻找的结构!
这将使您能够处理错误并执行最终操作;主try块是否成功。
这是一个基本示例:
try {
$x = 1/0
}
catch {
Write-Warning "An error occurred"
}
finally {
Write-Output "This always runs"
}
Run Code Online (Sandbox Code Playgroud)
更适合您的情况:
Write-Output "BEFORE: $(Get-Location)"
Push-Location -Path "C:\temp\csv"
try {
Write-Output "DURING TRY: $(Get-Location)"
$x = 1/0
}
catch {
Write-Warning "An error occurred"
}
finally {
Pop-Location
}
Write-Output "AFTER: $(Get-Location)"
Run Code Online (Sandbox Code Playgroud)
结果:
之前:C:\ temp
尝试期间:C:\ temp \ csv
警告:发生错误
之后:C:\ temp
| 归档时间: |
|
| 查看次数: |
340 次 |
| 最近记录: |