制作批处理文件记住一些东西

时间:2015-03-18 21:07:54

标签: batch-file

我遇到批处理文件问题。我需要它来记住很久的事情 一段的时间。假设我有一个名为%Rememberme%的变量:我需要记住这个因为某些原因可以说是一年。如何让我的批处理文件记住该变量?

嗯......我可以使用命令

echo将变量添加到文件中
    echo >>%Rememberme% C:\File.txt

嗯,事情是我无法做到的。我需要以其他方式记住它。 或者不知何故,我需要给批处理文件管理员权限,以便它可以读取或写入文件。有没有办法做到这一点?

4 个答案:

答案 0 :(得分:2)

您可以使用环境变量来执行此操作,但请注意不要覆盖现有变量。

EX:

SETX REMEMBERME "C:\windows\system32"

然后在另一个档案中,

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

SETX的文档在这里:TechNet - SETX

链接中的重要评论:

  

Setx提供了唯一的命令行或编程方式来直接和永久地设置系统环境值。系统环境变量可通过控制面板或注册表编辑器手动配置。 set命令位于命令解释程序(Cmd.exe)内部,仅为当前控制台窗口设置用户环境变量。

答案 1 :(得分:0)

以下是将变量保存在文件名中的示例。这显然假设变量仅限于文件名友好字符(如数字)。

:: 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%

您也可以将变量存储在文本文件中,但这需要打开文件才能读取变量。

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

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

echo %myvariable%

答案 2 :(得分:0)

你的问题不明确。它没有任何示例也没有明确的请求描述,所以我只能猜测......

显而易见的一点是:如何在批处理文件中使用记住其值很长一段时间? (即:总是)简单:只需在批处理文件中定义变量:

set Rememberme=The value to remember

当然,以前的方法不允许更改变量的值,但您在请求中没有提及此点:"变量的值可能会更改& #34; ...

尽管SETX命令应该有效,但它需要管理员权限,而SETX不适用于像这样的情况。例如,如果批处理文件在给定计算机中被更改或不再使用,会发生什么?好吧,变量的最后一个值将保留在这样的计算机

第二个明显的解决方案是将变量写入单独的文件,并在批处理文件启动时从那里读取它。如果单独的文件是数据文件,则Matt Johnson描述的方法应该有效,并且不需要管理员权限。您必须注意,单独的文件也可能是批处理文件,因此可以通过简单的call语句读取变量的值:

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

rem Read the value
call setTheValue.bat

然而&#34;事情是你无法做到这一点,所以你需要以其他方式记住#34;虽然你没有解释这个限制的原因...... < / p>

另一个解决方案(我认为你正在寻找的)是在同一个批处理文件中设置变量的定义

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

在之前的代码"%~F0"中表示正在运行的批处理文件本身的名称。这样,变量值中的每个更改都会在批处理文件的底部附加一个新行。

答案 3 :(得分:0)

第一

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

错了。它尝试将字符串“C:\ File.txt”写入变量%rememberme%引用的文件名中。你想要的是:

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

(或只有一个>来覆盖文件)

第二:如果您没有权限写入根目录,请使用您拥有的另一个目录,例如:

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

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

注意:请确保%Rememberme%>之间没有空格;如果你试着把它读回去,它就会成为字符串的一部分。

要读回来,请使用:

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