Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 在批处理文件中保存加载系统存在问题_Batch File - Fatal编程技术网

Batch file 在批处理文件中保存加载系统存在问题

Batch file 在批处理文件中保存加载系统存在问题,batch-file,Batch File,我一直在尝试制作这个巨大的批处理文件程序,在其中一次制作过程中,我意识到该程序需要执行两个不同的任务。因此,我做了另一个小程序来帮助我的大程序,这一切都很顺利,直到我开始需要将信息从大程序传输到小程序 我想这不会有什么问题,我只是制作了一个.sav文件,保存了小程序的所有必要信息!在此之后,我为这个小程序编写了代码,它将加载.sav文件中的所有信息。我认为我一切都很好,很清楚,但每当我加载程序时,都没有加载任何必要的数据 它没有像sayvar=2那样加载数据,而是像var=那样加载数据,这意味着

我一直在尝试制作这个巨大的批处理文件程序,在其中一次制作过程中,我意识到该程序需要执行两个不同的任务。因此,我做了另一个小程序来帮助我的大程序,这一切都很顺利,直到我开始需要将信息从大程序传输到小程序

我想这不会有什么问题,我只是制作了一个.sav文件,保存了小程序的所有必要信息!在此之后,我为这个小程序编写了代码,它将加载.sav文件中的所有信息。我认为我一切都很好,很清楚,但每当我加载程序时,都没有加载任何必要的数据

它没有像say
var=2那样加载数据,而是像
var=
那样加载数据,这意味着我的代码经常给我“ECHO IS OFF”错误,有时甚至崩溃

我试着在互联网上寻找解决方法,但我找不到其他有同样问题的人 我希望你们能帮助我,这里是关于我的代码在没有实际的var/位置名的情况下的外观

大项目:

(
echo %var1%
echo %var2%
echo %var3%
) > "Location\name.sav"  
小程序:

< "Location\name.sav" (
set /p var1=
set /p var2=
set /p var3=
)
<“Location\name.sav”(
设置/p变量1=
设置/p变量2=
设置/p变量3=
)
我没有打字错误,我检查了一百万次
如果有人知道如何解决这个问题,请帮助~

有一种更简单的方法,只需要在每个变量名的开头使用一个由一个或多个字符组成的预定字符串

下面的示例在每个变量名的开头使用字符串
var
,希望能向您展示它的工作原理,只需复制它并尝试一下即可:

@Echo Off
SetLocal EnableExtensions

Rem Make sure there are no existing variables in the environment named beginning with var.
For /F "Delims==" %%G In ('"(Set var) 2> NUL"') Do Set "%%G="

Rem Code which defines your variables each beginning with the string var.
Set "var1=some value"
Set "var2=another value"
Set "var3=different value"

Rem See the now defined var variables
Set var & Pause

Rem send each of your variables and their values out to a sav file.
Set var 1> "myfile.sav" 2> NUL

Rem Undefine your variables again.
For /F "Delims==" %%G In ('"(Set var) 2> NUL"') Do Set "%%G="

Rem check that the variables no longer exist.
Set var & Pause

Rem Get your variables back from the sav file.
For /F UseBackQ^ Delims^=^ EOL^= %%G In ("myfile.sav") Do Set "%%G"

Rem See the variables now defined again.
Set var & Pause

您发布的代码片段似乎还可以。 缺少的是为变量赋值的地方。 如果在同一个()代码块中分配这些值,则不能像在代码中那样回显这些值。 您必须使用变量的延迟扩展来使用带有最新值的echo。 参见setlocal/?有关使用延迟扩展的详细信息。
启用延迟扩展后,可以将
echo%var1%
更改为
echo!var1以获取要显示的值。

与Compo的答案相同,但是保存到可以调用的批处理文件更容易,如果在定义变量时使用一些宏来自动保存变量

@Echo关闭
::安全地定义宏。
SETLOCAL EnableExtensions DISABLEdelayedExpansion
rem::%Save%宏内置于每个def/vartype宏的定义中,以在定义时自动保存变量
rem::-def Vartypes:[[/S]标准字符串][[/P]设置/P输入提示][/I]设置/A整数变量]
Set User=“%TEMP%\%~n0\u0!\Sv.name!\u sav.bat”
设置保存=(对于/F“Tokens=1 Delims=”%i in('Set#Sv.')Do(如果不是“!%%i!”=”/Echo/Set“%%i=!%%~i!”)^>%User%
设置“Loc=(设置“#Sv.Loc=@”和标题!#Sv.Loc!)和%Save%”
rem:::用法:%def/S:VAR=Varname%VariableValue
设置“如果%%n==2(设置“#Sv.VAR=!str!”&%Save%),则在(12)中为%%n设置def/S=”,否则设置str=”
rem:::用法:%def/P:VAR=Varname%输出提示字符串
设置“def/P=For%%n in(12)Do If%%n==2((For/L%%v in(110)Do If”!#Sv.VAR!==“”(Set/P”#Sv.VAR=!promptstr!:“”)和%Save%)否则设置promptstr=”
rem:::用法:%def/I:VAR=Varname%=方程|%/A:V=Varname%+=IntegerVal |%/A:V=Varname%+=!积分!
设置“如果%%n==2(设置/A“#Sv.VAR!sum!”和%Save!”,则为(12)中的%%n设置def/I=否则设置sum=”
rem:::需要执行宏。
SETLOCAL ENABLEdelayedExpansion
:欢迎
rem:::第一个变量应该是name,因为save宏使用该名称引用用户save。
如果存在“%TEMP%\%~n0\u*\ u sav.bat”(Echo/现有用户:&Echo/&(For/F“Delims=“%%G in('Dir”%TEMP%\%~n0\u*\ u sav.bat“/B”)Do For/F“Tokens=2 Delims=”%%o in(“%%nG”)DoNul
如果不是“!#Sv.Loc!”==”(转到:!#Sv.Loc!)
暂停
:开始
%Loc:@=起点%
%def/I:VAR=美元%+=!随机!%%1000 + 500
Echo/你有美元#美元!。
:结束
%Loc:@=结束%
Echo/用户演示保存内容。
类型%User%
Endlocal&Endlocal

如果在文本编辑器中打开name.sav,它是否包含正确的信息?当您从大程序中删除重定向部分时,控制台窗口中会显示什么?