Ну, вы можете попробовать использовать file
, если вы не против прямой косой черты и не обучающей косой черты:
% set line "c:\\root\\machine\\spec\\detail\\"
c:\root\machine\spec\detail\
% file dirname $line
c:/root/machine/spec
В противном случае, если вы хотите сохранитьвсе, как вы упомянули в своем вопросе, тогда, я думаю, быстрое regsub
должно быть в порядке:
% set line "c:\\root\\machine\\spec\\detail\\"
c:\root\machine\spec\detail\
% regsub {[^\\]+\\$} $line ""
c:\root\machine\spec\
Или нереализованное решение;split и join:
% set line "c:\\root\\machine\\spec\\detail\\"
c:\root\machine\spec\detail\
% join [lreplace [split $c "\\"] end-1 end-1] "\\"
c:\root\machine\spec\
Разница будет в том, что file
будет знать, когда путь, который вы указываете, имеет максимально возможный уровень, в то время как другие решения не будут (они возвращают пустую строку):
% set line "c:\\"
c:\
% file dirname $line
c:/
% regsub {[^\\]+\\$} $line ""
% join [lreplace [split $c "\\"] end-1 end-1] "\\"
%