Windows cmd set command

In Windows Command Prompt, you can set a variable using the `set` command followed by the variable name and value. Here’s a code snippet demonstrating how to do this:

set MY_VARIABLE=HelloWorld

Understanding CMD Variables

What is a CMD Variable?

A variable in the context of CMD (Command Prompt) is essentially a storage location assigned to a name that can hold data. This data can be anything from strings to numbers, which can be used during runtime for various tasks. The ability to set variables in CMD is crucial for scripting and automation, allowing you to store information temporarily and use it dynamically.

Types of CMD Variables

CMD supports primarily two types of variables: user-defined variables and environment variables.

  • User-defined variables are created by users and exist only during the CMD session in which they are created. They disappear once the command window is closed.
  • Environment variables are predefined or user-created variables stored in the system’s environment, allowing them to persist beyond individual sessions. These are useful for storing configuration settings or system paths.

Exploring Cmd System Variables: A Quick Guide

Exploring Cmd System Variables: A Quick Guide

How to Set a Variable in CMD

Basic Syntax for Setting a Variable

To set a variable in CMD, you can use the following command structure:

set VARIABLE_NAME=value

For example, if you’d like to create a variable called `myVar`, you could use:

set myVar=HelloWorld

This command assigns the string `HelloWorld` to `myVar`. It’s important to note there should be no spaces on either side of the equal sign (=).

Viewing Variables

To display the value of a variable, you can use the `echo` command along with the variable enclosed in percent signs (%):

echo %myVar%

When executed, this command will output:

HelloWorld

This ability to view variable contents helps ensure that variables are set correctly.

Cmd Troubleshooting Made Simple: Quick Fixes Explained

Cmd Troubleshooting Made Simple: Quick Fixes Explained

Working with Environment Variables

What are Environment Variables?

Environment variables are key-value pairs stored in the operating system that can influence the behavior of processes. They offer a way to pass configuration information that various applications and CMD scripts can access.

Setting Environment Variables

To create or modify an environment variable, use the `setx` command, which can persist the variable even after the CMD session ends. The syntax is as follows:

setx VARIABLE_NAME value

For example, to create an environment variable called `myEnvVar`, you can execute:

setx myEnvVar=DataScience

Once created, this variable can be accessed in future CMD sessions, making it a valuable tool for configuration management.

Limitations of Environment Variables

One important aspect of environment variables is scope. Variables set with `setx` do persist across sessions, but they may not be immediately available in the current CMD window without reopening it. To verify persistence, you can check the variable by using:

echo %myEnvVar%

If you get the expected output, it confirms that the variable remains set.

Mastering Cmd Net View: A Quick Guide to Network Discovery

Mastering Cmd Net View: A Quick Guide to Network Discovery

Manipulating Variables

Updating Variables

Updating a variable is straightforward. You can reassign a new value to an existing variable using the same `set` command. For instance:

set myVar=NewValue

After executing this line, if you check the variable using `echo`, it will display:

echo %myVar%

Output:

NewValue

Unsetting Variables

To remove or «unset» a variable, you simply assign it an empty value. For example:

set myVar=

This command effectively deletes the `myVar`, and attempting to display it later using `echo` will yield no output.

Variable Expansion

You can also use variables within other variables, a technique known as variable expansion. For instance:

set name=John
set greet=Hello %name%

Using `echo %greet%`, will produce:

Hello John

This interaction showcases the power of utilizing variables for dynamic content generation.

Mastering Cmd Serial Number Command in Minutes

Mastering Cmd Serial Number Command in Minutes

Best Practices for Using CMD Variables

Naming Conventions

When setting CMD variables, it’s advisable to adopt clear and descriptive naming conventions. Using lowercase or underscores can enhance readability, making it easier for you and others to understand the script’s logic.

Scope of Variables

Understanding the scope of your variables is essential. Local variables can be created within scripts, while environment variables serve as global references accessible by any process in the system. Use local variables when the data doesn’t need to persist beyond a single execution context.

Mastering Cmd Trace: A Quick Guide to Effective Tracing

Mastering Cmd Trace: A Quick Guide to Effective Tracing

Advanced CMD Variable Techniques

Using Variables in Batch Scripts

Batch scripts often utilize variables for automation. Below is a simple example illustrating how to set and use variables in a batch file:

@echo off
set name=Alice
echo Welcome, %name%

When executed, this script will display:

Welcome, Alice

This simplicity allows for quick modifications and dynamic interactions in automation tasks.

Conditional Logic with Variables

You can pair variables with conditional logic in CMD through `if` statements. For instance:

if "%myVar%"=="HelloWorld" echo Success!

If `myVar` holds `HelloWorld`, this command outputs `Success!`. Such conditions let you create logic flows based on variable values, enhancing the functionality of your scripts.

Mastering Variables in Cmd: A Quick Reference Guide

Mastering Variables in Cmd: A Quick Reference Guide

Common Errors and Troubleshooting

Common Mistakes

Common mistakes often occur during variable assignment in CMD:

  • Improper syntax, such as using spaces around the equal sign.
  • Misspelled variable names, leading to confusion.

Always double-check the syntax and spellings when working with CMD variables to avoid these pitfalls.

Troubleshooting Tips

When facing issues with variables, it’s helpful to use `echo` and `set` commands for diagnostics. You can list all current variables using:

set

This command will display all the defined variables in the current CMD session, allowing you to troubleshoot effectively.

Mastering Cmd Parameters: A Quick Guide to Efficiency

Mastering Cmd Parameters: A Quick Guide to Efficiency

Conclusion

Setting and managing variables in CMD is a fundamental skill that enhances your command-line capabilities. By understanding how to define, manipulate, and use variables, you empower yourself to script more effectively, automate mundane tasks, and create dynamic command-line applications. Embrace the power of CMD variables to streamline your workflow and maximize efficiency!

Overview

The SET command in Windows CMD is used for displaying, setting, or removing environment variables in the command session. It can modify the system environment variables globally or configure them locally, affecting the behavior of scripts and the system. The command is pivotal in scripting and automation, managing paths for executable files, and configuring system-wide preferences or settings based on user environments.

Syntax

The basic syntax for using the SET command is as follows:

SET [variable=[string]]
  • variable is the name of the environment variable you want to set or modify.
  • string is the value that will be assigned to the variable. If the string is omitted, the command will delete the variable from the current session.

Additional syntax includes:

  • SET (by itself, lists all environment variables).
  • SET prefix (lists all variables starting with ‘prefix’).
  • SET "variable=" (clears the value of a variable).

Options/Flags

The SET command is straightforward with no additional flags or options for its operation. Its functionality is primarily based on how the command and arguments are structured.

Examples

Here are a few examples of how SET can be used in various scenarios:

  1. Viewing All Environment Variables:

    SET
    

    This command will display all environment variables set in the current session.

  2. Creating or Modifying an Environment Variable:

    SET PATH=%PATH%;C:\NewPath\bin
    

    This will append C:\NewPath\bin to the existing PATH environment variable.

  3. Viewing Environment Variables Starting with a Specific Prefix:

    SET TEMP
    

    This will list all variables that start with TEMP.

  4. Deleting an Environment Variable:

    SET TEMP=
    

    This sets TEMP to an empty value, effectively deleting it from the current session.

Common Issues

  • Accidental Overwriting: Be cautious when setting environment variables; improperly specifying the SET command can overwrite existing variables unintentionally.

    • Solution: Always backup critical environment variables before making changes.
  • Variable Not Persisting: Variables set using the SET command are valid only in the context of the script or command window where they were set.

    • Solution: To make permanent changes, use the System Properties or scripts that modify the registry.

Integration

The SET command is often used in conjunction with other CMD commands or scripts. Here’s an example of integrating SET with a batch script:

@echo off
SET LOGPATH=%USERPROFILE%\Logs
mkdir %LOGPATH%
SET LOGFILE=%LOGPATH%\log.txt
echo Log created on %DATE% at %TIME% > %LOGFILE%

This script sets up a log directory and log file, demonstrating the use of environment variables to manage file paths dynamically.

  • SETX: Used for setting the environment variables permanently system-wide or for the current user.
  • SETLOCAL and ENDLOCAL: Commands that enable local environments in batch scripts, useful for temporarily changing environment variables without affecting the system environment.

For further details about environment variable commands and usage, refer to the Microsoft official documentation: Windows Command Line.

  • SS64
  • CMD
  • How-to

Display, set, or remove CMD environment variables. Changes made with SET will remain only for the duration of the current CMD session.

Syntax
      SET variable
      SET variable=string
      SET "variable=string"
      SET "variable="

      SET /A "variable=expression"
      SET /P variable=[promptString]
      SET "

Key
   variable   A new or existing environment variable name e.g. _num
   string     A text string to assign to the variable.
   /A         Arithmetic expression see full details below.
   /P         Prompt for user input.

Variable names are not case sensitive but the contents can be.

It is good practice to avoid using any delimiter characters (spaces, commas etc) in the variable name.

Delimiter characters can be used in the value if the complete assignment is surrounded with double quotes to prevent the delimiter being interpreted.

Any extra spaces around either the variable name or the string, will not be ignored, SET is not forgiving of extra spaces like many other scripting languages. So use SET alpha=beta, not SET alpha = beta

The first character of the name must not be numeric. It is a common practice to prefix variable names with either an underscore or a dollar sign _variable or $variable, these prefixes are not required but help to prevent any confusion with the standard built-in Windows Environment variables or any other command strings.

SET PATH… the command SET PATH is functionaly identical to the PATH command for modifying the user’s PATH variable, see the PATH page for more detail.

The CMD shell will fail to read an environment variable if it contains more than 8,191 characters.

SET is an internal command.
If Command Extensions are disabled all SET commands are disabled other than simple assignments like: _variable=MyText

Display a variable:

In most contexts, surround the variable name with %’s and the variable’s value will be used
e.g. To display the value of the _department variable with the
ECHO command:
ECHO %_department%

If the variable name is not found in the current environment then SET will set %ERRORLEVEL% to 1 .
This can be detected using IF ERRORLEVEL …

Including extra characters can be useful to show any white space:
ECHO [%_department%]
ECHO «%_department%«

Type SET without parameters to display all the current environment variables.

Type SET with a variable name to display that variable
SET _department

The SET command invoked with a string (and no equal sign) will display a wildcard list of all matching variables

Display variables that begin with ‘P’:
SET p

Display variables that begin with an underscore
SET _

Set a variable:

Example of storing a text string:

C:\> SET «_dept=Sales and Marketing»
C:\> set _
_dept=Sales and Marketing

Set a variable that contains a redirection character, note the position of the quotes which are not saved:

SET «_dept=Sales & Marketing»

One variable can be based on another, but this is not dynamic
E.g.

C:\> set «xx=fish»
C:\> set «msg=%xx% chips»
C:\> set msg
msg=fish chips

C:\> set «xx=sausage»
C:\> set msg
msg=fish chips

C:\> set «msg=%xx% chips»
C:\> set msg
msg=sausage chips

Avoid starting variable names with a number, this will avoid the variable being mis-interpreted as a parameter
%123_myvar% < > %1 23_myvar

To display undocumented system variables:

SET «

Values with Spaces — using Double Quotes

There is no hard requirement to add quotation marks even when assigning a value that includes spaces:

SET _variable=one two three
ECHO %_variable%

Adding quotation marks is a best practise and will account for any trailing spaces and special characters like ‘&’.
The variable contents will not include the surrounding quotes:

SET «_variable=one & two«
ECHO «%_variable%»

If you place quotation marks around just the value, then those quotes will be stored:

SET _variable=«one & two»
ECHO %_variable%

This can be used for long filenames:

SET _QuotedPath=«H:\Config files\config 64.xml«
COPY %_QuotedPath% C:\Demo\final.xml

Alternatively you can add quotes at the point where they are needed:

SET «_Filename=config 64.xml»
COPY «H:\Config files\%_Filename%» C:\Demo\final.xml

Variable names with spaces

A variable can contain spaces and also the variable name itself can contain spaces,
therefore the following assignment:
SET _var =MyText
will create a variable called «_var « ← note the trailing space.

Prompt for user input

The /P switch allows you to set a variable equal to a line of input entered by the user.
The Prompt string is displayed before the user input is read.

@echo off
Set /P _ans=Please enter Department: || Set _ans=NothingChosen
:: remove &’s and quotes from the answer (via string replace)
Set _ans=%_ans:&=%
Set _ans=%_ans:"=%
If "%_ans%"=="NothingChosen" goto sub_error
If /i "%_ans%"=="finance" goto sub_finance
If /i "%_ans%"=="hr" goto sub_hr goto:eof :sub_finance echo You chose the finance dept goto:eof :sub_hr echo You chose the hr dept
goto:eof :sub_error echo Nothing was chosen

Both the Prompt string and the answer provided can be left empty. If the user does not enter anything (just presses return) then the variable will be unchanged and the errorlevel will be set to 1.

The script above strips out any ‘&’ and » characters but may still break if the string provided contains both.
For user provided input, it is a good idea to fully sanitize any input string for potentially
problematic characters (unicode/smart quotes etc).

The CHOICE command is an alternative for user input, CHOICE accepts only one character/keypress, when selecting from a limited set of options it will be faster to use.

Echo a string with no trailing CR/LF

The standard ECHO command will always add a CR/LF to the end of each string displayed, returning the cursor to the start of the next line.
SET /P does not do this, so it can be used to display a string. Feed a NUL character into SET /P like this, so it doesn’t wait for any user input:

Set /P _scratch=»This is a message to the user » <nul

Place the first line of a file into a variable:

Set /P _MyVar=<MyFilename.txt
Echo %_MyVar%

The second and any subsequent lines of text in the file will be discarded.

In very early versions of CMD, any carriage returns/new lines (CR+LF) before the first line containing text were ignored.

Delete a variable

Type SET with just the variable name and an equals sign:

SET _department=

Better still, to be sure there is no trailing space after the = place the expression in parentheses or quotes:
(SET _department=)
  or
SET «_department=»

Arithmetic expressions (SET /a)

Placing expressions in «quotes» is optional for simple arithmetic but required for any expression using logical operators or parentheses.
A best practice is to use quotes around all SET /A expressions, then they will always be in place when needed.

When referring to a variable in your expression, SET /A allows you to omit the %’s so _myvar instead of %_myvar%

The expression to be evaluated can include the following operators:
For the Modulus operator use (%) on the command line, or in a batch script it must be doubled up to (%%) as below.
This is to distinguish it from a FOR parameter.

   +   Add                set /a "_num=_num+5"
   +=  Add variable       set /a "_num+=5"
   -   Subtract           set /a "_num=_num-5"
   -=  Subtract variable  set /a "_num-=5"
   *   Multiply           set /a "_num=_num*5"
   *=  Multiply variable  set /a "_num*=5"
   /   Divide             set /a "_num=_num/5"
   /=  Divide variable    set /a "_num/=5"
   %%  Modulus            set /a "_num=17%%5"
   %%= Modulus            set /a "_num%%=5"
   !   Logical negation  0 (FALSE) ⇨ 1 (TRUE) and any non-zero value (TRUE) ⇨ 0 (FALSE)
   ~   Bitwise invert
   &   AND                set /a "_num=5&3"    0101 AND 0011 = 0001 (decimal 1)
   &=  AND variable       set /a "_num&=3"
   |   OR                 set /a "_num=5|3"    0101 OR 0011 = 0111 (decimal 7)
   |=  OR variable        set /a "_num|=3"
   ^   XOR                set /a "_num=5^3"    0101 XOR 0011 = 0110 (decimal 6)
   ^=  XOR variable       set /a "_num=^3"
   <<  Left Shift.    (sign bit ⇨ 0) An arithmetic shift.
   >>  Right Shift.   (Fills in the sign bit such that a negative number always remains negative.)
                       Neither ShiftRight nor ShiftLeft will detect overflow.
   <<= Left Shift variable     set /a "_num<<=2"
   >>= Right Shift variable    set /a "_num>>=2"

  ( )  Parenthesis group expressions  set /a "_num=(2+3)*5"
   ,   Commas separate expressions    set /a "_num=2,_result=_num*5"

Any SET /A calculation that returns a fractional result will be rounded down to the nearest whole integer.

Floating point arithmetic is not supported but you can call PowerShell for that: powershell.exe 12.9999999 + 2105001.01
or in a batch file:
For /F %%G in (‘powershell.exe 12.9999999 + 2105001.01’) do Echo Result: %%G

If a variable name is specified as part of the expression, but is not defined in the current environment, then SET /a will use a value of 0.

SET /A arithmetic shift operators do not detect overflow which can cause problems for any non-trivial math, e.g. the bitwise invert often incorrectly reverses the + / — sign of the result.

See SET /a examples below and this forum thread for more.
also see SetX, VarSearch and VarSubstring for more on variable manipulation.

SET /A should work within the full range of 32 bit signed integer numbers (-2,147,483,648 through 2,147,483,647) but in practice for negative integers it will not go below -2,147,483,647 because the correct two’s complement result 2,147,483,648 would cause a positive overflow.

Examples

SET /A «_result=2+4»
(=6)

SET /A «_result=5»
(=5)
SET /A «_result+=5″
(=10)

SET /A «_result=2<<3″
(=16) { 2 Lsh 3 = binary 10 Lsh 3 = binary 10000 = decimal 16 }

SET /A «_result=5%%2″
(=1) { 5/2 = 2 + 2 remainder 1 = 1 }

SET /A «_var1=_var2=_var3=10»
(sets 3 variables to the same value — undocumented syntax.)

SET /A will treat any character string in the expression
as an environment variable name. This allows you to do arithmetic with environment
variables without having to type any % signs to get the values. SET /A «_result=5 + _MyVar«

Multiple calculations can be performed in one line, by separating each calculation with commas, for example:

Set «_year=1999»
Set /a «_century=_year/100, _next=_century+1»

The numbers must all be within the range of 32 bit signed integer numbers (-2,147,483,648 through 2,147,483,647) to handle larger numbers use PowerShell or VBScript.

You can also store a math expression in a variable and substitute in different values, rather like a macro.

SET «_math=(#+6)*5»
SET /A _result=»%_math:#=4%
Echo %_result%
SET /A _result=»%_math:#=10%
Echo %_result%

Leading Zero will specify Octal

Numeric values are decimal numbers, unless prefixed by
0x for hexadecimal numbers,
0 for octal numbers.

So 0x10 = 020 = 16 decimal

The octal notation can be confusing — all numeric values that start with zeros are treated as octal but 08 and 09 are not valid octal digits.
For example SET /a «_month=07» will return the value 7, but SET /a «_month=09» will return an error.

Permanent changes

Changes made using the SET command are NOT permanent, they apply to the current CMD prompt only and remain only until the CMD window is closed.
To permanently change a variable at the command line use SetX
or with the GUI: Control Panel ➞ System ➞ Environment ➞ System/User Variables

Changing a variable permanently with SetX will not affect any CMD prompt that is already open.
Only new CMD prompts will get the new setting.

You can of course use SetX in conjunction with SET to change both at the same time:

Set _Library=T:\Library\
SetX _Library T:\Library\ /m

Change the environment for other sessions

Neither SET nor SetX will affect other CMD sessions that are already running on the machine. This as a good thing, particularly on multi-user machines, your scripts won’t have to contend with a dynamically changing environment while they are running.

It is possible to add permanent environment variables to the registry (HKCU\Environment), but this is an undocumented (and likely unsupported) technique and still it will not take effect until the users next login.

System environment variables can be found in the registry here:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

CALL SET

The CALL SET syntax will expand any variables passed on the same line, which is useful if you need to set one variable based on the value of another variable. CALL SET can also evaluate a variable substring, the CALL page has more detail on this technique, though in many cases a faster to execute solution is to use Setlocal EnableDelayedExpansion.

Autoexec.bat

Any SET statement in c:\autoexec.bat will be parsed at boot time
Variables set in this way are not available to 32 bit gui programs — they won’t appear in the control panel.
They will appear at the CMD prompt.

If autoexec.bat CALLS any secondary batch files, the additional batch files will NOT be parsed at boot.
This behaviour can be useful on a dual boot PC.

Errorlevels

When CMD Command Extensions are enabled (the default):

Event Errorlevel
If the variable was successfully changed. Errorlevel = unchanged,
SET No variable found or invalid name.
SET _var=value when _var name starts with «/» and not enclosed in quotes.
SET /P Empty response from user.
1
SET /A Unbalanced parentheses 1073750988
SET /A Missing operand 1073750989
SET /A Syntax error 1073750990
SET /A Invalid number 1073750991
SET /A Number larger than 32-bits 1073750992
SET /A Division by zero 1073750993

If the Errorlevel is unchanged, typically it will be 0 but if a previous command set an errorlevel, that will be preserved (this is a bug).

# I got my mind set on you
# I got my mind set on you… — Rudy Clark (James Ray/George Harrison)

Related commands

Syntax — VarSubstring Extract part of a variable (substring).
Syntax — VarSearch Search & replace part of a variable.
Syntax — Environment Variables — List of default variables.
CALL — Evaluate environment variables.
CHOICE — Accept keyboard input to a batch file.
ENDLOCAL — End localisation of environment changes, use to return values.
EXIT — Set a specific ERRORLEVEL.
PATH — Display or set a search path for executable files.
REG — Read or Set Registry values.
SETLOCAL — Begin localisation of environment variable changes.
SETX — Set an environment variable permanently.
Parameters — get a full or partial pathname from a command line variable.
StackOverflow — Storing a Newline in a variable.
Equivalent PowerShell: Set-Variable — Set a variable and a value (set/sv).
Equivalent PowerShell: Read-Host — Prompt for user input.
Equivalent bash command (Linux): env — Display, set, or remove environment variables.


Copyright © 1999-2025 SS64.com
Some rights reserved

Display, set, or remove CMD environment variables. Changes made with SET will remain only for the duration of the current CMD session.

Syntax
      SET variable
      SET variable=string
      SET "variable=string"
      SET "variable="

      SET /A "variable=expression"
      SET /P variable=[promptString]
      SET "

Key
   variable    : A new or existing environment variable name e.g. _num
   string      : A text string to assign to the variable.

   expression  : Arithmetic expression
   /A          : see full details of Arithmetic expressions below.

Variable names are not case sensitive but the contents can be.

It is good practice to avoid using any delimiter characters (spaces, commas etc) in the variable name.

Delimiter characters can be used in the value if the complete assignment is surrounded with double quotes to prevent the delimiter being interpreted.

Any extra spaces around either the variable name or the string, will not be ignored, SET is not forgiving of extra spaces like many other scripting languages. So use SET alpha=beta, not SET alpha = beta

The first character of the name must not be numeric. It is a common practice to prefix variable names with either an undescore or a dollar sign _variable or $variable, these prefixes are not required but help to prevent any confusion with the standard built-in Windows Environment variables or any other other command strings.

The CMD shell will fail to read an environment variable if it contains more than 8,191 characters.

Display a variable:

In most contexts, surround the variable name with %’s and the variable’s value will be used
e.g. To display the value of the _department variable with the ECHO command:
ECHO %_department%

If the variable name is not found in the current environment then SET will set %ERRORLEVEL% to 1 .
This can be detected using IF ERRORLEVEL …

Including extra characters can be useful to show any white space:
ECHO [%_department%]
ECHO “%_department%”

Type SET without parameters to display all the current environment variables.

Type SET with a variable name to display that variable
SET _department

The SET command invoked with a string (and no equal sign) will display a wildcard list of all matching variables

Display variables that begin with ‘P’:
SET p
Display variables that begin with an underscore
SET _

Set a variable:

Example of storing a text string:

C:\> SET _dept=Sales and Marketing
C:\> set _
_dept=Sales and Marketing

Set a variable that contains a redirection character, note the position of the quotes which are not saved:

SET “_dept=Sales & Marketing”

One variable can be based on another, but this is not dynamic
E.g.

C:\> set xx=fish
C:\> set msg=%xx% chips
C:\> set msg
msg=fish chips
C:\> set xx=sausage
C:\> set msg
msg=fish chips
C:\> set msg=%xx% chips
C:\> set msg
msg=sausage chips

Avoid starting variable names with a number, this will avoid the variable being misinterpreted as a parameter
%123_myvar% < > %1 23_myvar

To display undocumented system variables:

   SET "

Values with Spaces – using Double Quotes

There is no need to add quotation marks when assigning a value that includes spaces

SET _variable=one two three

For special characters like &, you can surround the entire expression with quotation marks.
The variable contents will not include the surrounding quotes:

SET “_variable=one & two”

If you place quotation marks around the value, then those quotes will be stored:

SET _variable=”one & two”

Variable names with spaces

A variable can contain spaces and also the variable name itself can contain spaces, therefore the following assignment:
SET _var =MyText
will create a variable called “_var ” – note the trailing space

Prompt for user input

The /P switch allows you to set a variable equal to a line of input entered by the user.
The Prompt string is displayed before the user input is read.

@echo off
Set /P _dept=Please enter Department || Set _dept=NothingChosen
If "%_dept%"=="NothingChosen" goto sub_error
If /i "%_dept%"=="finance" goto sub_finance
If /i "%_dept%"=="hr" goto sub_hr
goto:eof

:sub_finance
echo You chose the finance dept
goto:eof

:sub_hr
echo You chose the hr dept
goto:eof

:sub_error
echo Nothing was chosen

The Prompt string can be empty. If the user does not enter anything (just presses return) then the variable will be unchanged and an errorlevel will be set to 1.

The CHOICE command is an alternative to SET /P (but CHOICE accepts only one character/keypress.)

Place the first line of a file into a variable:

Set /P _MyVar=<MyFilename.txt
Echo %_MyVar%

In early versions of CMD, any carriage returns/new lines (CR+LF) before the first line containing text were ignored.

The second and any subsequent lines of text in the file will be discarded.

Delete a variable

Type SET with just the variable name and an equals sign:

SET _department=

Better still, to be sure there is no trailing space after the = place the expression in parentheses or quotes:
(SET _department=)
  or
SET “_department=”

Arithmetic expressions (SET /a)

Placing expressions in “quotes” is optional for simple arithmetic but required for any expression using logical operators.

When refering to a variable in your expression, SET /A allows you to omit the %’s so _myvar instead of %_myvar%

Any SET /A calculation that returns a fractional result will be rounded down to the nearest whole integer.

The expression to be evaluated can include the following operators:

   +   Add                set /a "_num=_num+5"
   +=  Add variable       set /a "_num+=5"
   -   Subtract           set /a "_num=_num-5"
   -=  Subtract variable  set /a "_num-=5"
   *   Multiply           set /a "_num=_num*5"
   *=  Multiply variable  set /a "_num*=5"
   /   Divide             set /a "_num=_num/5"
   /=  Divide variable    set /a "_num/=5"
   %%  Modulus            set /a "_num=17%%5"
   %%= Modulus            set /a "_num%%=5"
   !   Logical negation  0 (FALSE) ⇨ 1 (TRUE) and any non-zero value (TRUE) ⇨ 0 (FALSE)
   ~   Bitwise invert
   &amp;   AND                set /a "_num=5&amp;3"    0101 AND 0011 = 0001 (decimal 1)
   &amp;=  AND variable       set /a "_num&amp;=3"
   |   OR                 set /a "_num=5|3"    0101 OR 0011 = 0111 (decimal 7)
   |=  OR variable        set /a "_num|=3"
   ^   XOR                set /a "_num=5^3"    0101 XOR 0011 = 0110 (decimal 6)
   ^=  XOR variable       set /a "_num=^3"
   &lt;&lt;  Left Shift.    (sign bit ⇨ 0) An arithmetic shift.
   >>  Right Shift.   (Fills in the sign bit such that a negative number always remains negative.)
                       Neither ShiftRight nor ShiftLeft will detect overflow.
   &lt;&lt;= Left Shift variable     set /a "_num&lt;&lt;=2"
   >>= Right Shift variable    set /a "_num>>=2"

  ( )  Parenthesis group expressions  set /a "_num=(2+3)*5"
   ,   Commas separate expressions    set /a "_num=2,_result=_num*5"

If a variable name is specified as part of the expression, but is not defined in the current environment, then SET /a will use a value of 0.

In a batch script, the Modulus operator (%) must always be doubled up to (%%).

SET /A arithmetic shift operators do not detect overflow which can cause problems for any non-trivial math, e.g. the bitwise invert often incorrectly reverses the + / – sign of the result.

See SET /a examples below and this forum thread for more.
also see SetX, VarSearch and VarSubstring for more on variable manipulation.

Examples:

SET /A "_result=2+4"
(=6)

SET /A "_result=5"
(=5)
SET /A "_result+=5"
(=10)

SET /A "_result=2&lt;&lt;3"
(=16) { 2 Lsh 3 = binary 10 Lsh 3 = binary 10000 = decimal 16 }

SET /A "_result=5%%2"
(=1) { 5/2 = 2 + 2 remainder 1 = 1 }

SET /A "_var1=_var2=_var3=10"
(sets 3 variables to the same value - undocumented syntax.)

SET /A will treat any character string in the expression as an environment variable name. This allows you to do arithmetic with environment variables without having to type any % signs to get the values. SET /A _result=5 + _MyVar

Multiple calculations can be performed in one line, by separating each calculation with commas, for example:

_year=1999
Set /a _century=_year/100, _next=_century+1

The numbers must all be within the range of 32 bit signed integer numbers (-2,147,483,648 through 2,147,483,647) to handle larger numbers use PowerShell or VBScript.

Leading Zero will specify Octal

Numeric values are decimal numbers, unless prefixed by
0x for hexadecimal numbers,
for octal numbers.

So 0x10 = 020 = 16 decimal

The octal notation can be confusing – all numeric values that start with zeros are treated as octal but 08 and 09 are not valid octal digits.
For example SET /a _month=07 will return the value 7, but SET /a _month=09 will return an error.

Permanent changes

Changes made using the SET command are NOT permanent, they apply to the current CMD prompt only and remain only until the CMD window is closed.
To permanently change a variable at the command line use SetX
or with the GUI – Control Panel | System | Environment | System/User Variables

Changing a variable permanently with SetX will not affect any CMD prompt that is already open.
Only new CMD prompts will get the new setting.

You can of course use SetX in conjunction with SET to change both at the same time:

Set _Library=T:\Library\
SetX _Library T:\Library\ /m

Change the environment for other sessions

Neither SET nor SetX will affect other CMD sessions that are already running on the machine . This as a good thing, particularly on multi-user machines, your scripts won’t have to contend with a dynamically changing environment while they are running.

It is possible to add permanent environment variables to the registry (HKCU\Environment), but this is an undocumented (and likely unsupported) technique and still it will not take effect until the users next login.

System environment variables can be found in the registry here:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

CALL SET

The CALL SET syntax allows a variable substring to be evaluated, the CALL page has more detail on this technique, in most cases, a better approach is to use Setlocal EnableDelayedExpansion

Autoexec.bat

Any SET statement in c:\autoexec.bat will be parsed at boot time
Variables set in this way are not available to 32-bit GUI programs – they won’t appear in the control panel.
They will appear at the CMD prompt.

If autoexec.bat CALLS any secondary batch files, the additional batch files will NOT be parsed at boot.
This behavior can be useful on a dual boot PC.

Errorlevels

When CMD Command Extensions are enabled (the default):

If the variable was successfully changed unchanged, typically this will be 0 but if a previous command set an errorlevel, that will be preserved (this is a bug).
SET No variable found or invalid name.
SET _var=value when _var name starts with “/” and not enclosed in quotes.
SET /P Empty response from user.
1
SET /A Unbalanced parentheses 1073750988
SET /A Missing operand 1073750989
SET /A Syntax error 1073750990
SET /A Invalid number 1073750991
SET /A Number larger than 32-bits 1073750992
SET /A Division by zero 1073750993

SET is an internal command.
If Command Extensions are disabled all SET commands are disabled other than simple assignments like _variable=MyText

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

Appearance settings

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Как восстановить скрытый раздел windows 7
  • Windows 10 pro для образовательных учреждений активация
  • Intel hd graphics 610 драйвер windows 10 64 не ставится
  • Как узнать какое приложение расходует трафик windows
  • Виджет таймера для windows 10