Saving Vars
Moderator: DosItHelp
-
- Posts: 2
- Joined: 24 Mar 2014 14:27
Saving Vars
How would I save a variable so that it can be accessed if the program has been closed?
Re: Saving Vars
You can write the variable to a file.
Re: Saving Vars
Or use the registry:
Code: Select all
@Echo off&SetLocal
Set "NewVar=Compo"
Set "KEY=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
Reg Add "%KEY%" /V NewVar /D "%NewVar%" /F 1>Nul
-
- Posts: 2
- Joined: 24 Mar 2014 14:27
Re: Saving Vars
SO, I would just change Key to the variable's name?
-
- Expert
- Posts: 1166
- Joined: 06 Sep 2013 21:28
- Location: Virginia, United States
Re: Saving Vars
Key is where in the registry you're storing it. Change the value of NewVar to the variable you're storing.
Re: Saving Vars
gaventemples31415 wrote:SO, I would just change Key to the variable's name?
No, if you want to have a variable identified as %CDROM% with a Value of E: then change the script to read:
@Echo off&SetLocal
Set "CDROM=E:"
Set "KEY=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
Reg Add "%KEY%" /V CDROM /D "%CDROM%" /F 1>Nul
-
- Posts: 233
- Joined: 21 Nov 2010 08:07
- Location: At My Computer
Re: Saving Vars
gaventemples31415 wrote:How would I save a variable so that it can be accessed if the program has been closed?
More information about your specific program and what exactly you are trying to do would be helpful for a better answer..DP
Re: Saving Vars
You could try SETX
type SETX -I @ command prompt for examples
It may not work if script is not run in admin mode depending on win version
type SETX -I @ command prompt for examples
It may not work if script is not run in admin mode depending on win version
Re: Saving Vars
Some time ago I wrote a Batch-JScript hybrid script called SetEnv.bat that allows to define persistent variables of severals types. Here it is:
Antonio
Code: Select all
@if (@CodeSection == @Batch) @then
:: SetEnv.bat: Creation of persistent environment variables via a JScript subroutine
:: Antonio Perez Ayala
@echo off
setlocal EnableDelayedExpansion
if "%~1" neq "" if "%~1" neq "/?" goto begin
set start=
for /F "delims=:" %%a in ('findstr /N "^</*usage>" "%~F0"') do (
if not defined start (set start=%%a) else set /A lines=%%a-start-1
)
set line=0
for /F "skip=%start% tokens=1* delims=:" %%a in ('findstr /N "^" "%~F0"') do (
echo(%%b
set /A line+=1
if !line! equ %lines% goto :EOF
)
<usage>
Create persistent environment variables.
SETENV charVar=code strVar:=string ... [/T:envtype]
charVar Specifies the name of one-character environment-variable.
code Ascii (Unicode) code of the character assigned to charVar;
any code is valid, excepting zero.
strVar Specifies the name of string environment-variable.
string String of characters assigned to strVar;
if contain spaces or special characters, enclose it in quotes.
/T Specify the environment type for the variables.
envtype SYSTEM Applies to all users of the computer and is saved
between logoffs and restarts in the registry.
USER Applies to the user currently logged on to the
computer and is saved between logoffs and restarts.
VOLATILE Applies to current logon session and is not saved
between logoffs and restarts (this is the default).
PROCESS Applies to current process and might be passed to
child processes.
Examples:
[call] SetEnv BEL=7 BS=8 TAB=9 CR=13 LF=10
[call] SetEnv LastLogoff:="%date% @ %time%" /T:USER
</usage>
:begin
rem Define the variables via JScript
Cscript /nologo /E:JScript "%~F0" %*
goto :EOF
@end
// JScript section: SetEnv subprogram
// Define environment variables given in command-line arguments with this format:
// charVar=code strVar:="string" ... [/T:SYSTEM|USER|VOLATILE|PROCESS]
// Antonio Perez Ayala
// Reference: http://technet.microsoft.com/en-us/library/ee156595.aspx
var envType = WScript.Arguments.Named.Item("T");
if ( envType == undefined ) envType = "VOLATILE";
var WshShell = WScript.CreateObject("WScript.Shell"),
colEnvVars = WshShell.Environment(envType),
args = WScript.Arguments.Unnamed, name_Value, equalSignPos;
for ( var i = 0; i < args.Length; i++ ) {
name_Value = args.Item(i);
equalSignPos = name_Value.indexOf("=");
if ( name_Value.charAt(equalSignPos-1) == ":" )
colEnvVars(name_Value.slice(0,equalSignPos-1)) = name_Value.slice(equalSignPos+1);
else {
colEnvVars(name_Value.slice(0,equalSignPos)) = String.fromCharCode(parseInt(name_Value.slice(equalSignPos+1)));
}
}
Antonio