我遇到批处理文件问题。我需要它来记住很久的事情
一段的时间。假设我有一个名为%Rememberme%
的变量:我需要记住这个因为某些原因可以说是一年。如何让我的批处理文件记住该变量?
嗯......我可以使用命令
echo
将变量添加到文件中
echo >>%Rememberme% C:\File.txt
嗯,事情是我无法做到的。我需要以其他方式记住它。 或者不知何故,我需要给批处理文件管理员权限,以便它可以读取或写入文件。有没有办法做到这一点?
答案 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