2017-01-23 5 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が最初に起動されます。 2番目のコマンドラインを開くまで、2番目のコマンドラインの結果は "これは動作しません"と複数回連続していなければなりません。

私はさまざまな方法を試しました。たとえば、変数をハードディスク上のファイルに保存していますが、これは十分速くないため、私はメモリベースでなければなりません。 setxコマンドも十分に高速ではありません。

誰かが解決策を知っていれば嘆願は教えてくれます。

+0

[こちらはIPCの記事です](https://msdn.microsoft.com/en-us/library/windows/desktop/aa365574(v = vs.85).aspx)すべてのメソッドがバッチに適用できるわけではありませんしかし、スピードが問題であれば、お風呂はとにかく最良の選択ではないかもしれません。 – LotPings

+0

@LotPings:バッチファイルには適用できないものはありません(少なくとも外部の非標準ソフトウェアに頼らずに)。 – Joey

+0

2つの '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! 
      ) 
     ) 
    ) 

十分に高速である「すべきです」。

関連する問題