Windows IT Pro is the leading independent community for IT professionals deploying Microsoft Windows server and client applications and technologies.
  
  
  Advanced Search 


November 04, 2002

JSI Tip 5895. Freeware CONSET displays, sets, or deletes CMD.exe environment variables, modifies console parameters, and performs floating point mathematics.

RSS
Subscribe to Windows IT Pro | See More Tips Articles Here | Reprints | Or get the Monthly Online Pass—only $5.95 a month!


Click here to download CONSET.

The documentation contains:

CONSET                          User Manual                          CONSET

NAME	ConSet.exe - Displays, sets, or deletes cmd.exe environment 
	variables, modifies console parameters, and performs floating point 
	mathematics.

VERSION
	v1.4, 2002.06.06

PLATFORM
	Windows NT 4.0, X86

SYNOPSIS
	SIMPLIFIED
	[options] [name[=[value]]

	DETAILED
	[/E] [/N] [/Q] [/V] [/X] [/PID=pid#] [[/CD] [/RANDOM] [/S] | [/D string] 
	| [/TIME [h+/-#] [m+/-#] [s+/-#] | /DATE [y+/-#] [m+/-#] [d+/-#] | 
	[/A [/B|/I|/F|/O|/X] expr| name=value] | [/M &| 
	/T &| /U name[=[value]]] | [name[=[value|`command`]]]]]

LICENSE
	Unlimited use and unlimited distribution as a free product.

DESCRIPTION
	OVERVIEW
	ConSet serves two primary functions: the first is to display and 
	manipulate CMD.EXE environment variables; the second is to adjust the 
	console window's parameters. ConSet combines all of the functions of 
	CMD.EXE's built-in SET command and the primary functions of the 
	resource kit's SETX program with a floating point math library and 
	some console adjustment tools.

	When ConSet is run without any parameters the current environment is 
	printed. If a variable name or part of a variable name is specified, 
	only variables with matching names will be printed. A match will 
	occur if the string specified matches all or the beginning portion of 
	a variable name. If a variable name is followed by an equal sign and 
	nothing else, that variable will be deleted from the current 
	environment. If the equal sign is followed by any text, the variable 
	will be defined with that text. This default behavior can be modified 
	by the presence of any of the options in the section titled OPTIONS.

	A variable can also be set from a pipe or redirected STDIN if the 
	command line ends at the equal sign: 'COMMAND|ConSet VAR1=' and 
	'ConSet VAR=>month)&1),Month,1,1,12)"
			Ex: mat={2000 2001 2002;29 28 28}
			Ex: list[Month-1]=mat[0][Year]==2000?mat[1][Year]:0

		Internal constants (case sensitive):
		$c		Speed of light (2.99792458e8 m/s).
		$d		Convert degrees to radians (i.e. cos(60$d)).
		$g		Acceleration of gravity (9.80665 m/s**2).
		$G		Gravitational constant (6.67259e-11 m**3/(kg s**2)).
		$m		Convert minutes to radians.
		$s		Convert seconds to radians.
		$r		Convert radians to degrees (i.e. acos(.5)$r)
		$e		e, the base of natural logs.
		$p		Pi, ratio of circumference to diameter of a 
				circle.
		$z		Time bias in minutes (UTC=local time+$z/60).

		Supported operators in order of precedence:
		Implied multiplication is enabled. To imply multiplication of 
		variables, separate the variables with a space.

		#		Comment. Ignore everything until the next delimiter.
		{ }		Defines a set and must be used alone in a comma 
				delimited expression (Ex: 
				/A x={0 1 2;10 11 12}, 5x[0][1]).
		:=		Assigns an expression to a variable. Use this 
				operator when the expression should be assigned 
				without evaluation. Use backquotes to assign an 
				element of a list or matrix (Ex: 
				/a var:=`matrix[0][1]`). 
		( )		Grouping.
		++ --		Pre and post increment and decrement.
		** func	Power (x**2 is x squared) and all functions.
		!expr ~	Logical negation (results in 0 or 1) and bitwise 
				complement.
		expr!		Factorial. Uses e^(lng(x+1)) for non-integers.
		% / *		Modulus (x-y*ipart(x/y), use %% in scripts), 
				division, and multiplication. Excess modulus 
				operators are ignored.
		+ -		Addition and subtraction.
		>> <<		Bitwise right and left shifts.
		>= > <= <	Comparisons (results in 0 or 1).
		!= ==		Comparisons (results in 0 or 1).
		&		Bitwise AND (0b11 & 0b10 = 0b10).
		^		Bitwise XOR (0b110 ^ 0b101 = 0b011).
		|		Bitwise OR (0b01 | 0b10 = 0b11).
		&&		Logical AND (results in 0 or 1).
		||		Logical OR (results in 0 or 1).
		?:		Conditional (result=(test expr)?(true expr):(false 
				expr)).
		,;		Expression separator.

		Functions:
		If a function name is not followed by optional whitespace and a 
		parenthesis '(', it will be interpreted as a variable name. 

		User-defined functions:
		Variables may be defined as functions by including parentheses 
		and a parameter list in the variable name. The function must be 
		defined with no spaces between the function name and the first 
		parenthesis. The variables in the parameter list must match the 
		variables in the expression. For example:

			ConSet /A xRoot(x,y):=x**(1/y), xRoot=xRoot(8, 3)

		Multi-statement functions can be defined by enclosing the 
		statements in braces. Do not terminate the last statement with a 
		delimiter, it will be the return value. For example:

			ConSet /A func(x,y):={x+=1;x**y}, z=func(2, 2)

		Built-in functions:
		abs(expr)	Absolute value.
		acos(expr)	Arc cosine.
		asin(expr)	Arc sine.
		atan(expr)	Arc tangent.
		atan2(Yexpr,Xexpr)
				Arc tangent of Y/X.
		avgRC(expr,var,value[,h])
				Average rate of change (forward-difference quotient). 
				'expr' must be a function of 'var' whose derivative 
				will be examined at 'value' with a step value of 'h'. 
				'h' defaults to 0.001.
		cdim(var)	Column dimension of a list or array.
		ceil(expr)	Ceiling.
		cos(expr)	Cosine.
		cosh(expr)	Hyperbolic cosine.
		dim(var)	Length of the string contained in 'var'.
		dms(expr)	Returns 'expr' as three integers concatenated into 
				the format DMMSS. 'D' may be one or more digits.
		exp(expr)	Natural e raised to the value of expr.
				Also $e**(expr).
		find("sub","string"[,offset])
				Returns the zero-based position of "sub" in "string" 
				starting with 'offset', or zero if 'offset' is not 
				specified. If \"sub\" is not found the function 
				returns -1. Parameters may be quoted strings or 
				unquoted variable names. 'offset' need not be quoted.
				Negative offsets count forward from end.
		findi("sub","string"[,offset])
				Same as find() except that text case is 
				insignificant.
		floor(expr)	Floor.
		fpart(expr)	Fractional part.
		gamma(expr)	Gamma function (implemented as 
				exp(lng(expr))).
		gcd(expr,expr)
				Greatest common divisor.
		ipart(expr)	Integer part.
		jd2g(expr)	Gregorian date from a chronological JDN, valid 
				-4900-03-01 G onward. The return value is an integer 
				in the ISO format YYYYMMDD.
		jdnc([y[,m[,d]]])
				Julian Day Number- Chronological, valid -4800-03-01 G 
				onward. With no parameters the current JDN (UT) is 
				returned.
		lcm(expr,expr)
				Least common multiple.
		ldim(var)	Number of lines in a variable..
		ln(expr)	Natural log.
		lng(expr)	Gamma log (from Lanzcos. 0>expr>=450).
		log(expr)	Base 10 log.
		ltime()	Local time in hours.
		mjd([y[,m[,d]]])
				Modified Julian Day Number- With no parameters the 
				current MJD (UT) is returned.
		mjdg(expr)	Gregorian date from a MJD number. The return value is 
				an integer in the ISO format YYYYMMDD.
		mod(expr,expr)
				Modulus (x-y*floor(x/y). See also % operator.
		nCr(expr1,expr2)
				Number of combinations of expr1, an integer, taken 
				expr2 at a time.
		nDer(expr,var,value[,h]) or nDer(expr,var=value[,h])
				Numerical derivative (central-difference quotient). 
				'expr' must be a function of 'var' whose derivative 
				will be examined at 'value' with a step value of 'h'. 
				'h' defaults to 0.001.
		nPr(expr1,expr2)
				Number of permutations of expr1, an integer, taken 
				expr2 at a time.

		ord(string)	ASCII value of the first or indicated character in 
				'string'. Negative offsets count forward from end.
		poly(x,degree,coeffs...)
				Value of the polynomial of degree 'degree' at x='x' 
				with 'degree'+1 coeffs from low to high. Ex: x**3-
				2x**2+5x-1 with x=2 is poly(2,3,-1,5,-2,1). See 
				MathNotes.txt for further example and explanation.
		pow(Xexpr,Yexpr)
				Power function (X**Y). See also ** operator.
		prod(expr,var,low,high)
				Product of expr with var from low to  high. For 
				example, 'prod(x,x,1,5)' results in 120 (5!).
		rand([max])	A random integer from 0 to 'max' inclusive. 'max' 
				defaults to 32767.
		rdim(var)	Row dimension of a array.
		round(expr [,int])
				Rounds 'expr' to 'int' digits after the decimal. 
				'int' may be negative for integer rounding; if 
				omitted it defaults to 12.
		seq(expr,var,start,step,stop)
				Creates a list. Must be used alone in a comma 
				delimited expression. For example, 
				'/A z=seq(x,x,1,1,5)' results in 'z=1 2 3 4 5'.
		sign(expr)	The sign of the value returned by the expression: 
				(expr>0, sign()=1; expr<0, sign()=-1; expr=0, 
				sign=0).
		sin(expr)	Sine.
		sinh(expr)	Hyperbolic sine.
		sqrt(expr)	Square root. Also x**(1/2).
		sum(expr,var,low,high)
				Sum of expr with var from low to high. For 
				example, 'sum(x/2+0.5,x,2,4)' results in 6.
		tan(expr)	Tangent.
		tanh(expr)	Hyperbolic tangent.
		tick()		A relative time in ms that the system has been up 
				(wraps at 49.7 days).
		utime()	Universal time in hours.

	/B
		When used with the /A switch, numbers will be output in binary 
		form. If this switch is followed by a decimal, the fractional part 
		will also be converted and printed.

		Ex: ConSet /AB "bin=1<<31"

	/C	name=value to append
		Concatenate the existing value of 'name' with 'value to
		append'. This procedure is normally accomplished as follows:

		SET var=%var% more stuff

		If 'value to append' is omitted, a newline will be appended to 
		the variable's contents if it exists. If 'name' is not 
		previously defined then it will be set with 'value'. No spacing 
		is added between the concatenated strings. This switch can be 
		used to append additional elements to a list as follows

		ConSet /C VAR= %NewElement%

	/D	StringToMatch
		Delete all variables beginning with 'string'. If 'string' is 
		omitted, all 'ConSet_' variables will be deleted.

		EX: ConSet /D MyVars_

		This simplifies the task of cleaning up at the end of a script. 
		Precede all of your variables with a unique string and use this 
		switch to delete them all when they are no longer needed. For 
		example:

		SET MyVar_File=%1
		SET MyVar_Dir=%2
		ConSet /D MyVar_

	/E
		Perform an additional expansion of strings before setting or 
		printing.

		EX: ConSet /E VAR=%%VAR2%%

		This can be used for delayed expansion of variables in a script 
		or on the command line, and for expansion of variables in 
		values retrieved from the registry.

	/F
		When used with the /A switch, numbers will be formatted 
		according to the user's locale setting unless they are in the 
		binary, octal or hex bases. Commas, radix, or other separators are 
		inserted as specified by local settings. If the output base is 
		octal, this switch will cause the output to be in the traditional 
		format (0# instead of 0o#).

		EX: ConSet /AF VAR=123456789

	/H
		When used with the /P switch, typed text will not be echoed.

		Ex: ConSet /PH Password=What is your password? 

	/I
		When used with the /A switch, numbers will be output as 
		integers.

		Ex: ConSet /AI "int=1.1"

	/K	var=[\\computer\]hive\subkey\value
		Get the value from the specified registry location. Supported 
		hives are [HKEY_]: CLASSES_ROOT, CURRENT_USER, LOCAL_MACHINE, 
		USERS, and CURRENT_CONFIG. For remote computers, only the root 
		hives LOCAL_MACHINE and USERS are supported but the others are 
		still available as subkeys.

		EX: ConSet /K VAR=HKEY_CURRENT_USER\Console\FullScreen

		The hive may be specified by the full name (i.e. 
		HKEY_CLASSES_ROOT), the shortened name as shown above (i.e. 
		CLASSES_ROOT), or the common 3 or 4 letter abbreviation (HKCR, 
		HKCU, HKLM, HKU, HKCC). Both upper and lower case are accepted.

	/M	var[=[value]]
		Set or clear the machine (system) variable in the registry.

		EX: ConSet: /M /U var=value

		These variables are read from the registry when a top level 
		CMD.EXE is started, such as when opening a new console window. 
		Changes to these variables do not affect the current or child 
		processes.

	/N	StringToMatch
		Only the name of the variable(s) will be printed.

		EX: ConSet /N



		The normal output when listing variables is 'VARNAME=VALUE'. 
		This switch will cause only VARNAME to be printed.

	/O
		When used with the /A switch, numbers will be output in octal
		form. If this switch is followed by a decimal, the fractional part 
		will also be converted and printed. If the switch /F is included, 
		the traditional octal format will be used.

		Ex: ConSet /AO oct=100

	/P	var=prompt
		Prompt for input to be stored in the variable. 'prompt' will be 
		printed as the prompt.

		EX: ConSet /P UserName=What is your name?

		Displays the specified prompt and waits for input. When RETURN 
		is entered, input terminates and the string is stored in the 
		specified variable. Spacing is permitted after the prompt. The /H 
		switch may be included to disable input echo.

	/Q
		Disables all error reporting. Use this switch with caution.

		Ex: ConSet /QD MyVars_

	/S
		Set window and buffer parameters into 'ConSet_...' variables.

		EX: ConSet /S
		EX: ConSet ConSet_Color=0F

		Sets the following variables with the indicated value:

	       ConSet_Title        The title of the console window.
		ConSet_Color        *The text colors. See 'COLOR/?' for format.
		ConSet_W_Lines      *The number of console window lines.
		ConSet_W_Cols       *The number of console window columns.
		ConSet_B_Lines      *The number of console buffer lines.
		ConSet_B_Cols       *The number of console buffer colunms.
		ConSet_Cursor_sz    *The size in percentage (0-100) of the 
					cursor.
		ConSet_Cursor_XY    *Position of the cursor. Top-left is '0 0'.
		ConSet_MaxWin_XY    The maximum window size permitable.

		If ConSet is used to modify any of the variables that are 
		marked with an asterisk, ConSet will adjust the console window 
		to match the value specified. The example above changes the 
		background color to black and the foreground color to white. The 
		largest permitable buffer dimensions are 32,767 by 32,767.

	/T	var[=[value]]
		Set or clear the user variable in the registry's volatile 
		(temporary) environment.

		EX: ConSet: /T var=value

		These variables are read from the registry when a top level 
		CMD.EXE is started, such as when opening a new console window. 
		Changes to these variables do not affect the current or child 
		processes. This environment is not saved at user logoff.

	/U	var[=[value]]
		Set or clear the user variable in the registry.

		EX: ConSet: /M /U var=value

		These variables are read from the registry when a top level 
		CMD.EXE is started, such as when opening a new console window. 
		Changes to these variables do not affect the current or child 
		processes.

	/V	StringToMatch
		Only the value of the variable(s) will be printed.

		EX: ConSet /V

		The normal output when listing variables is 'VARNAME=VALUE'. 
		This switch will cause only VALUE to be printed.

	/X	and	/X StringToMatch
		When used with the /A switch, numbers will be output in hex
		form. If this switch is followed by a decimal, the fractional part 
		will also be converted and printed.

		Ex: ConSet /AX "hex=num&0xF0"

		When used with a string, only the variable that exactly matches 
		StringToMatch will be printed or deleted.

		EX: ConSet /X VarName
		EX: ConSet /DX VarName

		Normally all variables whose names match or begin with 
		StringToMatch will be printed or deleted. This switch permits 
		printing or deleting only the one variable which matches 
		exactly.

	/CD
		Set the current directory into CD.

		EX: ConSet /CD

		CD is supported as a dynamic variable by Windows 2000 but by 
		not by Windows NT4. This switch makes getting the current 
		directory on NT4 almost as easy. The current directory of any 
		drive that has been accessed by the current instance of CMD.EXE is 
		also available as the variable %=D:%, where D is the drive letter 
		of that drive.

	/DATE	[y+value] [m+value] [d+value]
		Set the local date (YYYY-MM-DD) into DATE, the local week number 
		(S## M##) into WEEK, the local day of year (001-366) into DOY, the 
		local weekday name into WEEKDAY, and the system (UTC) date (YYYY-
		MM-DD) into SYSTEMDATE.

		EX: ConSet /DATE

		DATE is supported as a dynamic variable by Windows 2000 but not 
		by Windows NT4. This switch makes getting the current date on 
		NT4 almost as easy. Most scripting problems require that the 
		date be in an easily parsed format, and the international 
		standard used by this program is just that. The WEEK variable 
		is set with 'S## M##', where S## is the week number with Sunday 
		as the first day of the week and M## is the week number with 
		Monday as the first day of the week. WEEKDAY is set with the 
		weekday name in the local language. With version 1.2 the variable 
		JULIAN has been replaced by the variable DOY. JULIAN will remain 
		available for a short transition period.

		Addition and subtraction can be performed on the current date 
		to produce a date relative to it. This does not affect the 
		system's date. Follow the /DATE switch with the desired math, for 
		example:

		ConSet /DATE y+1 m-13 d+30

	/PID=pid#
		Make all changes to the process with process identification 
		number 'pid#'.

		EX: ConSet /PID=245

		If 'PID#' is specified all changes will be made in the 
		environment of the specified process instead of in the current 
		environment. This feature can only be used to write to the 
		processes environment; all reads will still be from the current 
		environment. If 'PID#' is not specified, the variable PID will be 
		set with the PID# of ConSet's parent process.

	/RANDOM
		Set a random number into RANDOM.

		EX: ConSet /RANDOM

		RANDOM is supported as a dynamic variable by Windows 2000 but 
		not by Windows NT4. This switch makes getting a random number 
		on NT4 almost as easy. This program uses a much better 
		algorithm than does Windows 2000. You can see the difference if 
		you call both in a tight loop. The function rand() is available
		in the math package.

	/TIME
		Set the local time (HH:MM:SS.mss) into TIME, the system time 
		(HH:MM:SS.mss) into SYSTEMTIME, and the time bias ([-]minutes) 
		into TIMEBIAS.

		EX: ConSet /TIME

		TIME is supported as a dynamic variable by Windows 2000 but not 
		by Windows NT4. This switch makes getting the current time on 
		NT4 almost as easy. The TIMEBIAS variable indicates the difference 
		in minutes between UTC (system time) and local time (UTC=local 
		time+TIMEBIAS). The bias is not sdjusted if addition or 
		subtraction is performed on the TIME variable.

		Addition and subtraction can be performed on the current time 
		to produce a time relative to it. This does not affect the 
		system's time. If the resulting time carries over to a previous or 
		following day, the date variables will be set with the applicable 
		date. Follow the /TIME switch with the desired math, for example:

		ConSet /TIME h+1 m-13 s+30


ENVIRONMENT
	If the variable %ConSet_prec% is defined with a value, that value 
	will be used as the precision for floating point numbers.

	This program creates, modifies, and deletes environment variables.

REGISTRY
	This program does not read configuration information from the registry.

	The /M, /U, and /T switches create, modify, or delete values in the 
	machine or user environment subkeys.

LIMITS
	The environment appears to have a limit of about 32 kilobytes.

ERRORLEVEL
	The errorlevel set for all errors is 1. An errorlevel of 0 indicates no 
	error.

CHANGES
       Version 1.4
	1. Fixes a minor decision error with enumerating registry variables.
       2. When the switches /M and /U are used together when listing the PATH 
          variable, PATH from the machine key and PATH from the user key will 
          be concatenated as: PATH=[;]. This is the same 
          behavior as the system. The intervening semicolon is included only 
          if necessary.

BUGS
	Plenty. Report them to .

AUTHOR
	Frank P. Westlake .

COPYRIGHT
	Copyright (C)2001, 2002 by Frank P. Westlake.

ACKNOWLEDGEMENTS
	Significant help was provided by Garry Deane whose meticulous 
	attention to detail proved invaluable in locating many bugs and in 
	identifying some inconsistencies with SET.

	The algorithm for gamma log was retrieved from a calculator program 
	written for the TI-92 series calculator. The only credit given in 
	that program for the algorithm is "by Lanzcos".

	The Julian Day algorithms in the jdnc() and jd2g() functions were 
	written by Henry F. Fliegel and Thomas C. Van Flandern.



End of Article



Reader Comments

You must be a registered user or online subscriber to comment on this article. Please log on before posting a comment. Are you a new visitor? Register now




Top Viewed ArticlesView all articles
Battery Life Issues Almost Certainly Not Windows 7's Fault

While Microsoft is still investigating a notebook battery life issue that was supposedly caused by Windows 7, some interesting trends have emerged. ...

Command Prompt Tricks

One reader shares his tip for setting up the command prompt to reflect a remote path. ...

How can I convert a SQL date/time to just date?

...


Related Events 7 Ways To Get More From Your SharePoint Deployment Now

Check out our list of Free Email Newsletters!

Related Resources Introducing Left-Brain.com, the online IT bookstore
Looking for books, CDs, toolkits, eBooks? Prime your mind at Left-Brain.com

Discover Windows IT Pro eLearning Series!
Clear & detailed technical information and helpful how-to's, all in our trademark no-nonsense format


Windows IT Pro Home Register FAQ for Windows WinInfo News
Europe Edition About Us Contact Us/Customer Service Media Kit Affiliates / Licensing  
SQL Server Magazine Office & SharePoint Pro DevProConnections IT Job Hound
Left-Brain.com Technology Resource Directory asp.netPRO ITTV Windows SuperSite 
 
 Windows IT Pro is a Division of Penton Media Inc.
 © 2010 Penton Media, Inc. Terms of Use | Privacy Statement