Batch file 创造;“记忆”;在批处理文件中

Batch file 创造;“记忆”;在批处理文件中,batch-file,memory,temp,Batch File,Memory,Temp,我不知道我的问题在这里该怎么说。但例如,假设我有一个批处理文件,其中包含: @echo off echo test > text.txt set example_var=<text.txt 我希望%systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe。\code.ps1和find::/kl“的输出作为set/p code的输入,最终设置一个文本字符串以放入变量code中。>“%$F0”我不知道“%$F0”是什么意思,

我不知道我的问题在这里该怎么说。但例如,假设我有一个批处理文件,其中包含:

@echo off

echo test > text.txt
set example_var=<text.txt

我希望
%systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe。\code.ps1
find::/kl“
的输出作为
set/p code
的输入,最终设置一个文本字符串以放入变量
code中。

因此,您可以使用在主环境中持久存储

或者像您尝试在文件中存储单个变量并使用

(Echo:%Example_var%)>text.txt
Set /p "Example_var="<text.txt
存储/恢复
variablename=variablecontent


作为一种变体,不指定变量名,后者可以。

管道方法将无法为当前脚本设置变量,因为管道中的每个命令都在单独的进程中运行

处理将命令输出检索到变量的任务的通常方法是使用
for/f
命令

for /f "delims=" %%a in ('
    %systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe .\Code.ps1
    ^| find "::/kl"
') do set "code=%%a"

您是指在系统重新启动和脚本连续运行之间持续存在的“内存”吗?或者在当前脚本调用/运行期间的“内存”?我的意思是在当前运行的脚本中。可能是您在表单ND中寻找的问题-我不认为这是我以前看到的问题,但这可能仍然有效。我理解该链接中接受的注释,除了一部分:“echo set”SendPath=%SendPath%”>>“%$F0”我不知道“%$F0”是什么意思,也不知道如何使用带有百分号的变量。
%0
是对批处理文件本身的引用
%~f0
是具有完整路径的批处理文件。有关参数修饰符的完整列表,请参见
call/?
,您是说执行类似于:setx-var“example\u-var”的操作,然后稍后再调用?是的,他的意思是启动该操作,然后重用itI可以执行该操作,然后删除主变量。如果没有别的办法,我可能就这么做。我以前见过,但就是不明白。什么是“delims=”?为什么代码的“查找”部分下面有一个向上的胡萝卜?我只是用了这个代码,它是有效的。谢谢。@user8142044,请阅读
以获取/?
for/f
使用分隔符列表标记输入行,
delims=
只清除分隔符列表,因此这些行不会标记
^ |
是转义的管道字符。在
for/f
中,命令中用单引号括起来的行将被连接起来,以符合单行,因此您可以分隔管道中的元素,以便于读取。
(Echo:%Example_var%)>text.txt
Set /p "Example_var="<text.txt
(Set Example_var)>text.txt
For /f "delims=" %%A in (text.txt) Do Set %%A
for /f "delims=" %%a in ('
    %systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe .\Code.ps1
    ^| find "::/kl"
') do set "code=%%a"