Ricky Gonce
Ricky Gonce

Reputation: 135

Make A Batch File Remember Something

I'm having trouble with a batch file. I need it to remember somthing for a long period of time. Lets say I have a variable called %Rememberme%: I need to remember this for lets say a year for some reason. How can I make my batch file remember that variable?

Well... I could echo the variable to a file using the command

    echo >>%Rememberme% C:\File.txt

Well the thing is I can't have that. I need it to be remembered some other way. Or somehow I need to give the batch file administrator rights so that it can read or write to a file. Is there a way to do this?

Upvotes: 1

Views: 1386

Answers (5)

Gboy The Gamer
Gboy The Gamer

Reputation: 1

Here. This should help.

@echo off
echo What would you like to do?
echo 1. Enter your name
echo 2. Load your Name
choice /c 12
if %errorlevel% equ 1 goto newname
if %errorlevel% equ 2 goto loadname
:newname
cls
echo Input your name
set /p name=Name: 
echo Your Name is saved!
::Here is the command where your name saves to a file.
(
echo %name
)>yourname.name
pause
exit /b
:loadname
cls
::Here is the command where it loads your name
(
echo %name%
)<yourname.name
echo Your Name: %name%
pause
exit /b

Upvotes: 0

Stephan
Stephan

Reputation: 56190

first:

echo >>%Rememberme% C:\File.txt

is wrong. It tries to write the string "C:\File.txt" into a filename referenced by the variable %rememberme%. What you want is:

echo %Rememberme%>>c:\File.txt

(or only one > to overwrite the file)

Second: if you have no permission to write to the root-directory, use another directory, where you have, for example:

echo %Rememberme%>%userprofile%\file.txt

or

echo %Rememberme%>%public%\file.txt

Note: be sure, there is no space between %Rememberme% and >; it would become part of the string, if you try to read it back.

to read it back, use:

set /p "remembered=" <%public%\file.txt

Upvotes: 0

Aacini
Aacini

Reputation: 67216

Your question is not clear. It have not any example nor a clear description of the request, so I can only guess...

The obvious point first: how to have a variable in a Batch file that remember its value for a long period of time? (i.e.: always) Easy: just define the variable in the Batch file:

set Rememberme=The value to remember

Of course, previous method does not allows to change the value of the variable, but you had mentioned nothing about this point in your request: "the value of the variable may be changed"...

Although SETX command should work, it requires admin rights and SETX is not designed for cases like this one. For example, what happens if the Batch file is changed or is not used anymore in a given computer? Well, the last value of the variable will remain in such computer for ever!

The second obvious solution is to write the variable into a separate file and read it from there when the Batch file start. If the separate file is a data file, the method described by Matt Johnson should work and it does not require administrator rights. You must note that the separate file may also be a Batch file, so the value of the variable may be read via a simple call statement:

rem Save the value
echo set Rememberme=%Rememberme%> setTheValue.bat

rem Read the value
call setTheValue.bat

However "the thing is you can't have that, so you need to be remembered some other way", although you don't explain the reasons for this restriction...

Another solution (that I think is what you are looking for) is to set the definition of the variable in the same Batch file:

rem Read the variable at beginning of the Batch file:
call :setTheValue
echo Value = %Rememberme%

rem The rest of the Batch file goes here
. . .

rem If the value needs to be changed:
if %changeValue% equ "yes" (
   rem Do it:
   echo set Rememberme=%Rememberme%>> "%~F0"
)

rem End the Batch file
goto :EOF

rem Define the subroutine that set the value:
:setTheValue
set Rememberme=Initial value of the variable

In previous code "%~F0" represent the name of the running Batch file itself. This way, each change in the variable value will append a new line at the bottom of the Batch file.

Upvotes: 0

Matt Johnson
Matt Johnson

Reputation: 358

Here's an example of saving a variable in a file name. This obviously assumes the variable is limited to filename-friendly characters (like a number).

:: Reading variable
for %%f in (*.myvariable) do (
  set myvariable=%%f
)
:: Remove extension
set myvariable=%myvariable:~0,-11%

:: Setting variable
del *.myvariable
echo. > "%myvariable%.myvariable"

echo %myvariable%

You can also store the variable inside the text file, but this requires opening the file in order to read the variable.

:: Reading variable
for /F "tokens=*" %%A in (myvariable.txt) do (
    set "myvariable=%%A"
)

:: Setting variable
echo %myvariable%> myvariable.txt

echo %myvariable%

Upvotes: 0

Gray
Gray

Reputation: 7130

You can use environment variables to do this, but be careful not to overwrite existing variables.

EX:

SETX REMEMBERME "C:\windows\system32"

And then in another file,

>echo %REMEMBERME%
>C:\windows\system32

The documentation for SETX is here: TechNet - SETX:

Important remark from the link:

Setx provides the only command-line or programmatic way to directly and permanently set system environment values. System environment variables are manually configurable through Control Panel or through a registry editor. The set command, which is internal to the command interpreter (Cmd.exe), sets user environment variables for the current console window only.

Upvotes: 2

Related Questions