Issue with CD_LEAVE Alias

Jun 2, 2008
395
2
Newton, MA
I don't understand what is happening here.

TCC(27.01.23): C:\>alias cd_leave
echo `%1=`%1 & set oldcwd=%1 & echo oldcwd=%oldcwd

TCC(27.01.23): C:\>cd temp
%1=C:\
oldcwd=C:\ C:\temp

TCC(27.01.23): C:\temp>

It is acting as though I had written "set oldcwd=%1 %2" as the middle command of the three. If I change the alias to

echo `%1=`%1, `%2=`%2 & set oldcwd=%1 & echo oldcwd=%oldcwd

then things work.

TCC(27.01.23): C:\>alias cd_leave
echo `%1=`%1, `%2=`%2 & set oldcwd=%1 & echo oldcwd=%oldcwd

TCC(27.01.23): C:\>temp\
%1=C:\, %2=C:\temp
oldcwd=C:\

TCC(27.01.23): C:\temp>
 
May 20, 2008
12,049
128
Syracuse, NY, USA
Code:
CD_Leave - TCC will execute this alias when it is about to change the current directory.
TCC will pass the name of the current directory (%1) and the name of the new directory (%2).

Aliases have always acted that way. Any parameters given but not referred to in the alias are added to the end at execution time. So in your example,

Code:
echo `%1=`%1 & set oldcwd=%1 & echo oldcwd=%oldcwd

acts like

Code:
echo `%1=`%1 & set oldcwd=%1 & echo oldcwd=%oldcwd %2
 
Jun 2, 2008
395
2
Newton, MA
Ah yes. I thought of that, but it looked as though the %2 was getting added to the set command in the middle. If I change the alias to

echo `%1=`%1 & set oldcwd=%1 & echo oldcwd=%oldcwd & echo Last command

then I see that oldcwd does get defined correctly.

%1=C:\
oldcwd=C:\
Last command C:\temp

The more serious issues are with the cd_enter alias. I hope that there is a simple explanation (and solution).
 

Similar threads