首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >两个具有相同实时变量的命令行

两个具有相同实时变量的命令行
EN

Stack Overflow用户
提问于 2017-01-23 14:13:46
回答 2查看 46关注 0票数 0

我有两个命令行,我需要两个命令行中的变量是相同的。

例如:

命令行1:

代码语言:javascript
运行
复制
set testvar=this does not work

For /l %%a in (0 0 1) do echo %testvar%

命令行2:

代码语言:javascript
运行
复制
set testvar=this works

命令行1首先启动。第二个命令行的结果应该是在一行中多次“这不工作”,直到我打开第二个命令行,然后它应该在一行中多次更改为“此工作”。

我尝试过许多不同的方法,例如将变量存储在硬盘上的文件中,但这还不够快,我必须基于内存。setx命令也不够快。

如果有人知道解决方案,请告诉我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-23 14:20:54

您不能从批处理文件访问不同进程的进程内存(即使使用通常不应该访问的实际编程语言,但仍然存在更好的同步原语)。setx无法工作,因为它只是更改注册表,因此只影响新进程,而不是已经存在的进程。

文件实际上是您在批处理文件中的最佳选择。您是否真的尝试过它是否足够快(文件仍然是由内存支持的,所以在本例中创建和读取文件不应该引起持续的磁盘震荡)?请注意,您可能应该在消费批处理文件中包括某种类型的睡眠(例如,通过ping),以避免繁忙的等待。

如果您只对一个比特感兴趣(看起来是这样的),那么您只需检查是否存在一个比读取它更快的文件:

代码语言:javascript
运行
复制
1.cmd
=====

for /l %%a in (0,0,1) do (
  if exist this.works (echo this works) else (echo this does not work)
  ping localhost -n 2 >nul 2>&1
)

2.cmd

copy nul this.works
票数 1
EN

Stack Overflow用户

发布于 2017-01-23 17:36:56

对我来说,没有更多的信息,文件“应该”足够快。

代码语言:javascript
运行
复制
@echo off
    setlocal enableextensions enabledelayedexpansion

    set "flagFile=flagfile.txt"
    >"%flagFile%" type nul 

    if "%~1"=="second" goto :secondCopy
    start "" "%~f0" second

:firstCopy
    set /p "var=Input something: "
    >>"%flagFile%" echo !time! !var!
    goto :firstCopy

:secondCopy
    echo Waiting for data
    <"%flagFile%" (
        for /l %%a in (0 0 1) do (
            set /p "var=" && (
                echo !time! !var!
            )
        )
    )

这将允许您比较写入和读取时间之间的时间差。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41808371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档