2个具有相同实时变量的单独命令行

时间:2017-01-23 14:13:46

标签: batch-file

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

例如:

命令行1:

set testvar=this does not work

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

命令行2:

set testvar=this works

首先启动命令行1。 第二个命令行的结果应为"这不起作用"连续多次,直到我打开第二个命令行,然后它应该改为"这适用于"连续多次。

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

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

2 个答案:

答案 0 :(得分:1)

您无法从批处理文件访问不同进程的进程内存(即使使用实际的编程语言,您通常也不应该这样,但无论如何都有更好的同步原语)。 setx无法正常工作,因为它只是更改了注册表,因此只会影响新的进程,而不是现有进程。

文件实际上是批处理文件中最好的选择。您是否真的尝试过它是否足够快(文件仍然由内存支持,因此在这种情况下创建文件并读取它不会导致磁盘不断抖动)?请注意,您可能在您的消费批处理文件中包含某种类型的休眠(例如,通过ping),以避免繁忙等待。

如果你只对一个位感兴趣(看起来像你),那么你可以检查是否存在比读取文件更快的文件:

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 :(得分:1)

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

@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!
            )
        )
    )

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