dbohdan 2015-03-11: with-path is to cd what withOpenFile is to open.
proc with-path {path code} { set prevPath [pwd] cd $path uplevel 1 $code cd $prevPath }
DKF: In 8.6, it might be better to do:
proc with-path {path code} { set prevPath [pwd] cd $path try { uplevel 1 $code } finally { cd $prevPath } }
AMG: No question about it, this is clearly a case where try ... finally ... is needed. This way the previous working directory is restored no matter what, plus errors generated by $code are propagated.
Additionally, DKF's version corrects a problem with the original: it ensures [with-path] returns the result of evaluating $code.