我有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命令也不够快。
如果有人知道解决方案,请告诉我。
答案 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!
)
)
)
这将允许您比较写入和读取时间之间的时差。