【问题标题】:Creating "Memory" In Batch Files在批处理文件中创建“内存”
【发布时间】:2017-06-10 16:54:50
【问题描述】:

我不知道如何在这里表达我的问题。但例如,假设我有一个批处理文件:

@echo off

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

我知道这段特定的代码是多余的,因为您可以将“example_var”设置为等于“test”,但我的问题是如何在其中创建“内存”(如文本文档保存的数据)批次?

类似这样的:

@echo off

echo test 0>&1
set example_var=<&1

基本上我只是想避免创建临时文本文档来保存信息。我确信我之前在这个网站上找到了一个示例,但我找不到它。

编辑:

原来是这样的:

(%systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe .\Code.ps1) | find "::/kl" | set /p code

我希望%systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe .\Code.ps1find "::/kl" 的输出成为set /p code 的输入,最终设置要放入变量code. 的文本字符串

【问题讨论】:

  • 您是指在系统重新启动和脚本连续运行之间持续存在的“内存”?或者只是在当前调用/运行脚本期间“内存”
  • 我的意思是在当前运行的脚本中。
  • 也许this 是您要找的问题
  • MC ND - 我不认为那是我以前看到的那个,但这仍然可能有效。我理解了该链接中接受的评论,除了一部分:“echo set“SendPath=%SendPath%”>>“%~F0””我不知道“%~F0”是什么意思,或者如何使用这些变量带有一个百分号。
  • %0 是对批处理文件本身的引用。 %~f0 是具有完整路径的批处理文件。有关参数修饰符的完整列表,请参阅 call /?

标签: batch-file memory temp


【解决方案1】:

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

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

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

【讨论】:

  • 我以前见过,但就是不明白。什么是“delims=”?为什么下面代码的“查找”部分带有向上的胡萝卜?我刚刚使用了代码,它可以工作。谢谢。
  • @user8142044,阅读for /?for /f 使用分隔符列表对输入行进行标记,delims= 只是清除分隔符列表,因此不会对行进行标记。 ^| 是转义的管道字符。在for /f 中用单引号括起来的命令中的行将被连接以符合单行,因此您可以分隔管道中的元素以便于阅读。
【解决方案2】:

每个 cmd.exe 实例都从启动进程继承环境,启动进程从主环境继承。
因此,您可以使用setx 永久存储在主环境中。

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

(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

哪些存储/恢复variablename=variablecontent

作为不指定变量名的变体,后者可以store/restore the whole environment

【讨论】:

  • 所以你是说做类似的事情: setx var "example_var" 然后再调用它?
  • 是的,他的意思是启动它然后重用它
  • 我可以这样做,然后删除主变量。如果没有其他方法,我可能会这样做。
猜你喜欢
  • 1970-01-01
  • 2013-09-25
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多