1

これは正しいと思いますが、何らかの理由で出力ファイル「ram.dat」から読み取っていません。誰でもこれでエラーを見つけることができますか?

@echo off
set percent=90

:ramcalc
cls
if %percent% GTR 90 Echo Needs To Be Less Than 90
if %percent% LSS 1 Echo Needs To Be Greater Than 1
echo Type Percent Of Ram To Calculate
set /p percent=1-90:
if %percent% GTR 90 goto ramcalc
if %percent% LSS 1 goto ramcalc

cls Calculating...
setlocal ENABLEDELAYEDEXPANSION
set vidx=0
for /F "tokens=*" %%A in (ram.dat) do (
    SET /A vidx=!vidx! + 1
    set var!vidx!=%%A
    echo %%A
)
set var > test.txt
calc %var2%+%var3%+%var4%+%var5% >tmp
set /p add= < tmp
del tmp
calc %add%/1000000 >tmp
set /p divide= < tmp
del tmp
calc %divide%*0.%percent% >tmp
set /p ram= < tmp
del tmp
set /a round=%ram%+0
set ram=%round%
calc %ram%/1024 >tmp
set /p gb= < tmp
del tmp
set /a ramb=%gb%+0

cls
echo %percent% Rounded Is %ram%MB Approxamatly %ramb%GB 
pause
goto ramcalc

これを動的メモリの変更に使用する予定です。これは、コードの変更されたサンプルにすぎません。

4

1 に答える 1

1

突然消えたとき、私はあなたの他の質問への答えを入力していました. その質問で、あなたは 3 つの複雑さを扱っていました。1) DOS での算術演算は 32 ビットの数値に制限されています。2) WMIC は Unicode を出力するため、for /Fコマンドをスローします。3)変数endlocalを破棄しramます。3つの問題すべてを解決するために私が思いついたのは次のとおりです。

@echo off

wmic memorychip get capacity>ram.dat
type ram.dat>ram.txt
setlocal ENABLEDELAYEDEXPANSION

set /p percent=Enter percentage (1-100): 

set vidx=0
set var1=0
set var2=0
set var3=0

for /F "skip=1 delims=" %%i in (ram.txt) do (
  if "!tmp!" NEQ "" (
    SET /A vidx=!vidx! + 1
    set var!vidx!=%%i
  )
)

set /a var1/=1048576
set /a var2/=1048576
set /a var3/=1048576
set /a total=!var1!+!var2!+!var3!
set ram=!total!MB

del ram.dat
del ram.txt

endlocal &set /a ram=%total% * %percent% / 100

set ram=%ram%MB
set ram

これにより、3 つのメモリ カード スロットの RAM が計算ramされ、バッチ ファイルの実行の最後に環境変数が設定されたままになります。現在の質問の新しいコードは、利用可能な RAM のパーセンテージを計算したいようです。DOS では 10 進数の計算はできないと思うので、別の式を使用する必要があります。

編集 1

例を更新して、2 番目の質問に含めたパーセンテージを含めました。境界チェックを追加する必要があります。

于 2013-06-14T03:44:42.957 に答える