Implement escape char in console. "^"
cmd.c - when the env isnt found, dont zero out the params
redir.c - skip over all ^ when looking for redir/pipe
echo.c - when printing out, treat ^ correctly.
Modified: trunk/reactos/subsys/system/cmd/cmd.c
Modified: trunk/reactos/subsys/system/cmd/echo.c
Modified: trunk/reactos/subsys/system/cmd/redir.c

Modified: trunk/reactos/subsys/system/cmd/cmd.c
--- trunk/reactos/subsys/system/cmd/cmd.c	2005-08-25 19:53:37 UTC (rev 17544)
+++ trunk/reactos/subsys/system/cmd/cmd.c	2005-08-25 20:05:07 UTC (rev 17545)
@@ -1027,7 +1027,7 @@
 		cp = commandline;
 		while (*ip)
 		{
-			if (*ip == _T('%'))
+         if (*ip == _T('%'))
 			{
 				switch (*++ip)
 				{
@@ -1077,7 +1077,6 @@
 		            GetCurrentDirectory (MAX_PATH, szPath);
                 cp = _stpcpy (cp, szPath);                 
               }
-
               /* %TIME% */
               else if (_tcsicmp(ip,_T("time")) ==0)
               {
@@ -1146,8 +1145,18 @@
                 evar = malloc ( 512 * sizeof(TCHAR));
                 if (evar==NULL) 
                     return 1; 
-
+					 SetLastError(0);
                 size = GetEnvironmentVariable (ip, evar, 512);
+					 if(GetLastError() == ERROR_ENVVAR_NOT_FOUND)
+					 {
+						 /* if no env var is found you must 
+						    continue with what was input*/
+					   cp = _stpcpy (cp, _T("%"));
+						cp = _stpcpy (cp, ip);
+						cp = _stpcpy (cp, _T("%"));
+					 }
+					 else
+					 {
                 if (size > 512)
                 {
                     evar = realloc(evar,size * sizeof(TCHAR) );
@@ -1162,6 +1171,7 @@
                 {
 								 cp = _stpcpy (cp, evar);
                 }
+					 }
 
                 free(evar);
               }

Modified: trunk/reactos/subsys/system/cmd/echo.c
--- trunk/reactos/subsys/system/cmd/echo.c	2005-08-25 19:53:37 UTC (rev 17544)
+++ trunk/reactos/subsys/system/cmd/echo.c	2005-08-25 20:05:07 UTC (rev 17545)
@@ -33,6 +33,7 @@
 INT CommandEcho (LPTSTR cmd, LPTSTR param)
 {
 	TCHAR szMsg[RC_STRING_MAX_SIZE];
+	INT i = 0;
 
 #ifdef _DEBUG
 	DebugPrintf (_T("CommandEcho '%s' : '%s'\n"), cmd, param);
@@ -58,7 +59,20 @@
 		else if (_tcsicmp (param, D_ON) == 0)
 			bEcho = TRUE;
 		else if (*param)
+		{
+			while(i < _tcslen(param))
+			{
+				if(param[i] == _T('^'))
+				{
+					memmove(&param[i],&param[i + 1], _tcslen(&param[i]) * sizeof(TCHAR));
+					//skip past the char being escaped
+					i++;
+				}
+				else
+					i++;
+			}
 			ConOutPuts (param);
+		}
 		else
 		{
 			LoadString(CMD_ModuleHandle, STRING_ECHO_HELP5, szMsg, RC_STRING_MAX_SIZE);

Modified: trunk/reactos/subsys/system/cmd/redir.c
--- trunk/reactos/subsys/system/cmd/redir.c	2005-08-25 19:53:37 UTC (rev 17544)
+++ trunk/reactos/subsys/system/cmd/redir.c	2005-08-25 20:05:07 UTC (rev 17545)
@@ -78,6 +78,12 @@
 	/* find and remove all the redirections first */
 	while (*sp)
 	{
+		if (*sp == _T('^'))
+		{
+			*dp++ = *sp++;
+			*dp++ = *sp++;
+			continue;
+		}
 		if ((*sp == _T('"')) || (*sp == _T('\'')))
 		{
 			/* No redirects inside quotes */
@@ -242,8 +248,14 @@
 	sp = s;
 	while (*sp)
 	{
-		if ((*sp == _T('"')) || (*sp == _T('\'')))
+		if (*sp == _T('^'))
 		{
+			*sp++;
+			*sp++;
+			continue;
+		}
+		else if ((*sp == _T('"')) || (*sp == _T('\'')))
+		{
 			TCHAR qc = *sp;
 
 			do