2017-01-23 14 views
0

各個命令行我有2個命令行和我需要的變量在兩個命令行是相同的。2相同的實時可變

例如:

命令行1:

set testvar=this does not work 

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

命令行2:

set testvar=this works 

命令行1首先被啓動。 第二條命令行的結果應該是「這行不通」連續多次,直到我打開第二條命令行,那麼它應該連續多次更改爲「this works」。

我已經嘗試了很多不同的方法,例如存儲在硬盤文件中的變量,但是這還遠遠不夠快,我必須要基於內存的。 setx命令也不夠快。

如果有人知道解決方案請求告訴我。

+0

[這裏是關於IPC的文章](https://msdn.microsoft.com/en-us/library/windows/desktop/aa365574(V = vs.85)的.aspx)不是所有的方法都適用於批量,但如果速度是一個問題,洗浴可能不是最好的選擇。 – LotPings

+0

@LotPings:我會說這些東西都不適用於批處理文件(至少不使用外部非標準軟件)。 – Joey

+0

要同步兩個'cmd'情況下,你可能會感興趣的['waitfor'命令(http://ss64.com/nt/waitfor.html)... – aschipfl

回答

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 
+0

'setx'加上'reg query'應該這樣做。 –

+0

@KlitosKyriacou:在這種情況下,我寧願直接使用註冊表而不是污染環境變量默認值。不過,在循環上啓動'reg'可能比所有其他選項慢。 – Joey

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

快這將允許您比較寫入和讀出時間之間的時間差。