Set and print content of environment variable in cmd.exe subshell?How can I display the contents of an environment variable from the command prompt in Windows 7?Setting and getting Windows environment variables from the command prompt?cmd.exe SET command does not save values for new cmd.exe sessionsSet enviroment variable setxUsing an environment variable set to a path value: the system cannot find the path specified for %OPENCV_DIR%How can I set temporary environment for explorer (renewed)how to set up an environment variable that it stores a path along with another env variable but doesnt expandsNested environment variable does not expandedAre there rules to Windows 7 Environment variable names?How can I set a dynamically evaluated environment variable for Windows' Command Processor (cmd.exe)?How to set Base64 encryption key as Environment (system) Variable on Windows 10

Should QA ask requirements to developers?

Should I take out a loan for a friend to invest on my behalf?

Do f-stop and exposure time perfectly cancel?

Am I not good enough for you?

How to create a hard link to an inode (ext4)?

Is there any way to click on 6th item of this list

Are babies of evil humanoid species inherently evil?

Are there historical instances of the capital of a colonising country being temporarily or permanently shifted to one of its colonies?

They call me Inspector Morse

Try Catch Block Affecting a Variable in an Enclosing Scope

Why is this plane circling around the LKO airport every day?

How do I express some one as a black person?

How to share a mine of irresistable resources in the middle of an ocean without conflict?

What are actual Tesla M60 models used by AWS?

Force user to remove USB token

htop displays identical program in multiple lines

What Happens when Passenger Refuses to Fly Boeing 737 Max?

What to do when during a meeting client people start to fight (even physically) with each others?

Accountant/ lawyer will not return my call

Is this combination of Quivering Palm and Haste RAW?

My story is written in English, but is set in my home country. What language should I use for the dialogue?

Good allowance savings plan?

What are some noteworthy "mic-drop" moments in math?

UART pins to unpowered MCU?



Set and print content of environment variable in cmd.exe subshell?


How can I display the contents of an environment variable from the command prompt in Windows 7?Setting and getting Windows environment variables from the command prompt?cmd.exe SET command does not save values for new cmd.exe sessionsSet enviroment variable setxUsing an environment variable set to a path value: the system cannot find the path specified for %OPENCV_DIR%How can I set temporary environment for explorer (renewed)how to set up an environment variable that it stores a path along with another env variable but doesnt expandsNested environment variable does not expandedAre there rules to Windows 7 Environment variable names?How can I set a dynamically evaluated environment variable for Windows' Command Processor (cmd.exe)?How to set Base64 encryption key as Environment (system) Variable on Windows 10













4















Consider this example, where I start a new "sub" instance of cmd.exe, and then try to set a new environment variable in it, and then check if it has the proper value set (this is in cmd.exe of Windows 10):



>cmd /c "SET OPERATION=NEW & SET O"
OneDrive=C:UsersuserOneDrive
OPERATION=NEW
OS=Windows_NT


So, as noted in https://superuser.com/a/776506/688965 - by doing SET O I would "display all variables that begin with the letter 'O'", and indeed, it shows that an environment variable OPERATION exists, and its value is NEW. So far, so good.



However, if I try to print the environment value instead, it does not expand:



>cmd /c "SET OPERATION=NEW & echo %OPERATION%"
%OPERATION%


... however, if I try to expand any other environment variable, it works ?!:



>cmd /c "SET OPERATION=NEW & echo %OS%"
Windows_NT


Why does this happen? How can I set an environment variable, and then print it with echo in a single line, in a cmd.exe subshell?










share|improve this question

















  • 2





    "Why does this happen?" The %OPERATION% is executed before it has been set. See How does the Windows Command Interpreter (CMD.EXE) parse scripts? for the gory details.

    – DavidPostill
    2 hours ago











  • Thanks @DavidPostill - feel free to post this as an answer, I'll accept it!

    – sdbbs
    2 hours ago















4















Consider this example, where I start a new "sub" instance of cmd.exe, and then try to set a new environment variable in it, and then check if it has the proper value set (this is in cmd.exe of Windows 10):



>cmd /c "SET OPERATION=NEW & SET O"
OneDrive=C:UsersuserOneDrive
OPERATION=NEW
OS=Windows_NT


So, as noted in https://superuser.com/a/776506/688965 - by doing SET O I would "display all variables that begin with the letter 'O'", and indeed, it shows that an environment variable OPERATION exists, and its value is NEW. So far, so good.



However, if I try to print the environment value instead, it does not expand:



>cmd /c "SET OPERATION=NEW & echo %OPERATION%"
%OPERATION%


... however, if I try to expand any other environment variable, it works ?!:



>cmd /c "SET OPERATION=NEW & echo %OS%"
Windows_NT


Why does this happen? How can I set an environment variable, and then print it with echo in a single line, in a cmd.exe subshell?










share|improve this question

















  • 2





    "Why does this happen?" The %OPERATION% is executed before it has been set. See How does the Windows Command Interpreter (CMD.EXE) parse scripts? for the gory details.

    – DavidPostill
    2 hours ago











  • Thanks @DavidPostill - feel free to post this as an answer, I'll accept it!

    – sdbbs
    2 hours ago













4












4








4








Consider this example, where I start a new "sub" instance of cmd.exe, and then try to set a new environment variable in it, and then check if it has the proper value set (this is in cmd.exe of Windows 10):



>cmd /c "SET OPERATION=NEW & SET O"
OneDrive=C:UsersuserOneDrive
OPERATION=NEW
OS=Windows_NT


So, as noted in https://superuser.com/a/776506/688965 - by doing SET O I would "display all variables that begin with the letter 'O'", and indeed, it shows that an environment variable OPERATION exists, and its value is NEW. So far, so good.



However, if I try to print the environment value instead, it does not expand:



>cmd /c "SET OPERATION=NEW & echo %OPERATION%"
%OPERATION%


... however, if I try to expand any other environment variable, it works ?!:



>cmd /c "SET OPERATION=NEW & echo %OS%"
Windows_NT


Why does this happen? How can I set an environment variable, and then print it with echo in a single line, in a cmd.exe subshell?










share|improve this question














Consider this example, where I start a new "sub" instance of cmd.exe, and then try to set a new environment variable in it, and then check if it has the proper value set (this is in cmd.exe of Windows 10):



>cmd /c "SET OPERATION=NEW & SET O"
OneDrive=C:UsersuserOneDrive
OPERATION=NEW
OS=Windows_NT


So, as noted in https://superuser.com/a/776506/688965 - by doing SET O I would "display all variables that begin with the letter 'O'", and indeed, it shows that an environment variable OPERATION exists, and its value is NEW. So far, so good.



However, if I try to print the environment value instead, it does not expand:



>cmd /c "SET OPERATION=NEW & echo %OPERATION%"
%OPERATION%


... however, if I try to expand any other environment variable, it works ?!:



>cmd /c "SET OPERATION=NEW & echo %OS%"
Windows_NT


Why does this happen? How can I set an environment variable, and then print it with echo in a single line, in a cmd.exe subshell?







windows command-line cmd.exe environment-variables






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked 3 hours ago









sdbbssdbbs

1577




1577







  • 2





    "Why does this happen?" The %OPERATION% is executed before it has been set. See How does the Windows Command Interpreter (CMD.EXE) parse scripts? for the gory details.

    – DavidPostill
    2 hours ago











  • Thanks @DavidPostill - feel free to post this as an answer, I'll accept it!

    – sdbbs
    2 hours ago












  • 2





    "Why does this happen?" The %OPERATION% is executed before it has been set. See How does the Windows Command Interpreter (CMD.EXE) parse scripts? for the gory details.

    – DavidPostill
    2 hours ago











  • Thanks @DavidPostill - feel free to post this as an answer, I'll accept it!

    – sdbbs
    2 hours ago







2




2





"Why does this happen?" The %OPERATION% is executed before it has been set. See How does the Windows Command Interpreter (CMD.EXE) parse scripts? for the gory details.

– DavidPostill
2 hours ago





"Why does this happen?" The %OPERATION% is executed before it has been set. See How does the Windows Command Interpreter (CMD.EXE) parse scripts? for the gory details.

– DavidPostill
2 hours ago













Thanks @DavidPostill - feel free to post this as an answer, I'll accept it!

– sdbbs
2 hours ago





Thanks @DavidPostill - feel free to post this as an answer, I'll accept it!

– sdbbs
2 hours ago










2 Answers
2






active

oldest

votes


















3














Why does this happen?



The %OPERATION% is expanded (Phase 1) before the variable has been set (Phase 7).



See How does the Windows Command Interpreter (CMD.EXE) parse scripts? for the gory details:




Processing a line of code in a batch file involves multiple phases.



Here is a brief overview of the various phases:



Phase 0) Read Line:



Phase 1) Percent Expansion:



Phase 1.5) Remove : Remove all Carriage Return (0x0D) characters



Phase 2) Process special characters, tokenize, and build a cached
command block: This is a complex process that is affected by things
such as quotes, special characters, token delimiters, and caret
escapes.



Phase 3) Echo the parsed command(s) Only if the command block did not
begin with @, and ECHO was ON at the start of the preceding step.



Phase 4) FOR %X variable expansion: Only if a FOR command is active
and the commands after DO are being processed.



Phase 5) Delayed Expansion: Only if delayed expansion is enabled



Phase 5.3) Pipe processing: Only if commands are on either side of a
pipe



Phase 5.5) Execute Redirection:



Phase 6) CALL processing/Caret doubling: Only if the command token is
CALL



Phase 7) Execute: The command is executed







share|improve this answer






























    3














    To enable neccessary delayed expansion in a cmd subshell you'll have to use the /V:ON switch of cmd.exe and use an ! exclamation mark instead on the % percent sign.



    > cmd /V:ON /C "SET OPERATION=NEW&echo [!OPERATION!]"
    [NEW]


    Just a reminder

    The trailing space in your original set will be part of the variable content:



    > cmd /V:ON /C "SET OPERATION=NEW &echo [!OPERATION!]"
    [NEW ]





    share|improve this answer
























      Your Answer








      StackExchange.ready(function()
      var channelOptions =
      tags: "".split(" "),
      id: "3"
      ;
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function()
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled)
      StackExchange.using("snippets", function()
      createEditor();
      );

      else
      createEditor();

      );

      function createEditor()
      StackExchange.prepareEditor(
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader:
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      ,
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      );



      );













      draft saved

      draft discarded


















      StackExchange.ready(
      function ()
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1413376%2fset-and-print-content-of-environment-variable-in-cmd-exe-subshell%23new-answer', 'question_page');

      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      3














      Why does this happen?



      The %OPERATION% is expanded (Phase 1) before the variable has been set (Phase 7).



      See How does the Windows Command Interpreter (CMD.EXE) parse scripts? for the gory details:




      Processing a line of code in a batch file involves multiple phases.



      Here is a brief overview of the various phases:



      Phase 0) Read Line:



      Phase 1) Percent Expansion:



      Phase 1.5) Remove : Remove all Carriage Return (0x0D) characters



      Phase 2) Process special characters, tokenize, and build a cached
      command block: This is a complex process that is affected by things
      such as quotes, special characters, token delimiters, and caret
      escapes.



      Phase 3) Echo the parsed command(s) Only if the command block did not
      begin with @, and ECHO was ON at the start of the preceding step.



      Phase 4) FOR %X variable expansion: Only if a FOR command is active
      and the commands after DO are being processed.



      Phase 5) Delayed Expansion: Only if delayed expansion is enabled



      Phase 5.3) Pipe processing: Only if commands are on either side of a
      pipe



      Phase 5.5) Execute Redirection:



      Phase 6) CALL processing/Caret doubling: Only if the command token is
      CALL



      Phase 7) Execute: The command is executed







      share|improve this answer



























        3














        Why does this happen?



        The %OPERATION% is expanded (Phase 1) before the variable has been set (Phase 7).



        See How does the Windows Command Interpreter (CMD.EXE) parse scripts? for the gory details:




        Processing a line of code in a batch file involves multiple phases.



        Here is a brief overview of the various phases:



        Phase 0) Read Line:



        Phase 1) Percent Expansion:



        Phase 1.5) Remove : Remove all Carriage Return (0x0D) characters



        Phase 2) Process special characters, tokenize, and build a cached
        command block: This is a complex process that is affected by things
        such as quotes, special characters, token delimiters, and caret
        escapes.



        Phase 3) Echo the parsed command(s) Only if the command block did not
        begin with @, and ECHO was ON at the start of the preceding step.



        Phase 4) FOR %X variable expansion: Only if a FOR command is active
        and the commands after DO are being processed.



        Phase 5) Delayed Expansion: Only if delayed expansion is enabled



        Phase 5.3) Pipe processing: Only if commands are on either side of a
        pipe



        Phase 5.5) Execute Redirection:



        Phase 6) CALL processing/Caret doubling: Only if the command token is
        CALL



        Phase 7) Execute: The command is executed







        share|improve this answer

























          3












          3








          3







          Why does this happen?



          The %OPERATION% is expanded (Phase 1) before the variable has been set (Phase 7).



          See How does the Windows Command Interpreter (CMD.EXE) parse scripts? for the gory details:




          Processing a line of code in a batch file involves multiple phases.



          Here is a brief overview of the various phases:



          Phase 0) Read Line:



          Phase 1) Percent Expansion:



          Phase 1.5) Remove : Remove all Carriage Return (0x0D) characters



          Phase 2) Process special characters, tokenize, and build a cached
          command block: This is a complex process that is affected by things
          such as quotes, special characters, token delimiters, and caret
          escapes.



          Phase 3) Echo the parsed command(s) Only if the command block did not
          begin with @, and ECHO was ON at the start of the preceding step.



          Phase 4) FOR %X variable expansion: Only if a FOR command is active
          and the commands after DO are being processed.



          Phase 5) Delayed Expansion: Only if delayed expansion is enabled



          Phase 5.3) Pipe processing: Only if commands are on either side of a
          pipe



          Phase 5.5) Execute Redirection:



          Phase 6) CALL processing/Caret doubling: Only if the command token is
          CALL



          Phase 7) Execute: The command is executed







          share|improve this answer













          Why does this happen?



          The %OPERATION% is expanded (Phase 1) before the variable has been set (Phase 7).



          See How does the Windows Command Interpreter (CMD.EXE) parse scripts? for the gory details:




          Processing a line of code in a batch file involves multiple phases.



          Here is a brief overview of the various phases:



          Phase 0) Read Line:



          Phase 1) Percent Expansion:



          Phase 1.5) Remove : Remove all Carriage Return (0x0D) characters



          Phase 2) Process special characters, tokenize, and build a cached
          command block: This is a complex process that is affected by things
          such as quotes, special characters, token delimiters, and caret
          escapes.



          Phase 3) Echo the parsed command(s) Only if the command block did not
          begin with @, and ECHO was ON at the start of the preceding step.



          Phase 4) FOR %X variable expansion: Only if a FOR command is active
          and the commands after DO are being processed.



          Phase 5) Delayed Expansion: Only if delayed expansion is enabled



          Phase 5.3) Pipe processing: Only if commands are on either side of a
          pipe



          Phase 5.5) Execute Redirection:



          Phase 6) CALL processing/Caret doubling: Only if the command token is
          CALL



          Phase 7) Execute: The command is executed








          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered 2 hours ago









          DavidPostillDavidPostill

          106k26228263




          106k26228263























              3














              To enable neccessary delayed expansion in a cmd subshell you'll have to use the /V:ON switch of cmd.exe and use an ! exclamation mark instead on the % percent sign.



              > cmd /V:ON /C "SET OPERATION=NEW&echo [!OPERATION!]"
              [NEW]


              Just a reminder

              The trailing space in your original set will be part of the variable content:



              > cmd /V:ON /C "SET OPERATION=NEW &echo [!OPERATION!]"
              [NEW ]





              share|improve this answer





























                3














                To enable neccessary delayed expansion in a cmd subshell you'll have to use the /V:ON switch of cmd.exe and use an ! exclamation mark instead on the % percent sign.



                > cmd /V:ON /C "SET OPERATION=NEW&echo [!OPERATION!]"
                [NEW]


                Just a reminder

                The trailing space in your original set will be part of the variable content:



                > cmd /V:ON /C "SET OPERATION=NEW &echo [!OPERATION!]"
                [NEW ]





                share|improve this answer



























                  3












                  3








                  3







                  To enable neccessary delayed expansion in a cmd subshell you'll have to use the /V:ON switch of cmd.exe and use an ! exclamation mark instead on the % percent sign.



                  > cmd /V:ON /C "SET OPERATION=NEW&echo [!OPERATION!]"
                  [NEW]


                  Just a reminder

                  The trailing space in your original set will be part of the variable content:



                  > cmd /V:ON /C "SET OPERATION=NEW &echo [!OPERATION!]"
                  [NEW ]





                  share|improve this answer















                  To enable neccessary delayed expansion in a cmd subshell you'll have to use the /V:ON switch of cmd.exe and use an ! exclamation mark instead on the % percent sign.



                  > cmd /V:ON /C "SET OPERATION=NEW&echo [!OPERATION!]"
                  [NEW]


                  Just a reminder

                  The trailing space in your original set will be part of the variable content:



                  > cmd /V:ON /C "SET OPERATION=NEW &echo [!OPERATION!]"
                  [NEW ]






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited 2 hours ago

























                  answered 2 hours ago









                  LotPingsLotPings

                  5,0601823




                  5,0601823



























                      draft saved

                      draft discarded
















































                      Thanks for contributing an answer to Super User!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid


                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.

                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function ()
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1413376%2fset-and-print-content-of-environment-variable-in-cmd-exe-subshell%23new-answer', 'question_page');

                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      -cmd.exe, command-line, environment-variables, windows

                      Popular posts from this blog

                      Frič See also Navigation menuinternal link

                      Identify plant with long narrow paired leaves and reddish stems Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?What is this plant with long sharp leaves? Is it a weed?What is this 3ft high, stalky plant, with mid sized narrow leaves?What is this young shrub with opposite ovate, crenate leaves and reddish stems?What is this plant with large broad serrated leaves?Identify this upright branching weed with long leaves and reddish stemsPlease help me identify this bulbous plant with long, broad leaves and white flowersWhat is this small annual with narrow gray/green leaves and rust colored daisy-type flowers?What is this chilli plant?Does anyone know what type of chilli plant this is?Help identify this plant

                      fontconfig warning: “/etc/fonts/fonts.conf”, line 100: unknown “element blank” The 2019 Stack Overflow Developer Survey Results Are In“tar: unrecognized option --warning” during 'apt-get install'How to fix Fontconfig errorHow do I figure out which font file is chosen for a system generic font alias?Why are some apt-get-installed fonts being ignored by fc-list, xfontsel, etc?Reload settings in /etc/fonts/conf.dTaking 30 seconds longer to boot after upgrade from jessie to stretchHow to match multiple font names with a single <match> element?Adding a custom font to fontconfigRemoving fonts from fontconfig <match> resultsBroken fonts after upgrading Firefox ESR to latest Firefox