我有两个命令行,我需要两个命令行中的变量是相同的。
例如:
命令行1:
set testvar=this does not work
For /l %%a in (0 0 1) do echo %testvar%
命令行2:
set testvar=this works
命令行1首先启动。第二个命令行的结果应该是在一行中多次“这不工作”,直到我打开第二个命令行,然后它应该在一行中多次更改为“此工作”。
我尝试过许多不同的方法,例如将变量存储在硬盘上的文件中,但这还不够快,我必须基于内存。setx命令也不够快。
如果有人知道解决方案,请告诉我。
发布于 2017-01-23 14:20:54
您不能从批处理文件访问不同进程的进程内存(即使使用通常不应该访问的实际编程语言,但仍然存在更好的同步原语)。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
发布于 2017-01-23 17:36:56
对我来说,没有更多的信息,文件“应该”足够快。
@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!
)
)
)
这将允许您比较写入和读取时间之间的时间差。
https://stackoverflow.com/questions/41808371
复制相似问题