SET [-v] [sname [value]]
SET [-d
-d - Deletes the environment variable
-v - Volatile variable
sname - Environment variable name
value - Environment variable value
Notes:
1. SET values are stored in EFI NVRAM and will be retained between boots
unless the option -v is specified.
2. The dmpstore command can be used to display EFI Shell NVRAM variables.
3. Available NVRAM storage available for the set command will depend on
the system implementation.
4. SET may store NVRAM variables on the file system /efi/boot/bootstr.nvr
if no NVRAM is implemented by the core EFI routines.
Examples:
* To add an environment variable:
Shell> set DiagnosticPath fs0:\efi\diag;fs1:\efi\diag
* To display all environment variables:
Shell> set
* path : .
diagnosticPath : fs0:\efi1.1\diag;fs1:\efi1.1\diag
* To delete an environment variable:
Shell> set -d diagnosticpath
Shell> set
* path : .
* To change an environment variable:
fs0:\> set src efi
fs0:\> set
* path : .;fs0:\efi\tools;fs0:\efi\boot;fs0:\
src : efi
fs0:\> set src efi1.1
fs0:\> set
* path : .;fs0:\efi\tools;fs0:\efi\boot;fs0:\
src : efi1.1
* To append an environment variable:
Shell> set
* path : .
Shell> set path %path%;fs0:\efi\tools;fs0:\efi\boot;fs0:\
Shell> set
* path : .;fs0:\efi\tools;fs0:\efi\boot;fs0:\
* To set a volatile variable that will disappear at the next boot:
Shell> set -v EFI_SOURCE c:\project\EFI1.1
Shell> set
* path : .;fs0:\efi\tools;fs0:\efi\boot;fs0:\
* EFI_SOURCE : c:\project\EFI1.1
請問一下 如何讓環境變數遞增呢
回覆刪除我想讓我的系統在shell底下重開機去計算次數
感謝
這個批次檔每執行一次就加一,最大到20
刪除##===========================================
##存成test.nsh
##===========================================
echo -off
if exist %myval% then
set myval 0
endif
for %a in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
if %myval% == %a then
echo "[ %a ]"
set mylock 1
else
if %mylock% == 1 then
set mylock 0
set myval %a
endif
endif
endfor
echo "%myval%"
set -d mylock
echo -on
##===========================================
fs0:\>test.nsh
test> echo -off
[ 0 ]
1
在執行一次
fs0:\>test.nsh
test> echo -off
[ 1 ]
2
在執行一次
fs0:\>test.nsh
test> echo -off
[ 2 ]
3
Thank you.
回覆刪除但我比較想要的是沒有限制次數的去跑
等到我跑到一定時間,才去看次數
Anyway, 感謝
這個程式範圍從0~19999次,這樣應該夠測3天的reboot test吧!!
刪除這次加了goto加快它的處理速度。
如果要大於這個範圍,可能需要自己寫一支AP。
因為Shell都靠String來處理。 :)
##===========================================
##存成t1.nsh
##===========================================
echo -off
if exist %myval% then
set myval 0
endif
for %a run (0 19999)
if %myval% == %a then
echo "[ %a ]"
set mylock 1
else
if %mylock% == 1 then
set mylock 0
set myval %a
goto Leave_For
endif
endif
endfor
:Leave_For
echo "%myval%"
set -d mylock
echo -on
謝謝
回覆刪除這樣就可以在不用ap的情況下把這個環境變數當計數器了^^
版主您好,我想請問你if exist %myval%這三行的用意應該是當%myval這個環境變數不存在時就將它建立並初始為0
回覆刪除可是我實在不了解為什麼不是用if not exist,另外用%myval%是代表它的值,那麼當%myval > 0時,if exist %myval%應該就等於 if exist 1…,這樣是不是就會一直為true,但實際跑起來又不是那麼一回事,可以請您指點一下if exist %myval%的意思嗎?感謝唷。
if exist %myval% then
刪除set myval 0
echo "ABC"
endif
這幾行是檢查,如果環境變數myval不存在,它將被建立並設為0。
你可以加一行echo "ABC" 在這判斷條件中,
然後執行
fs0:\>set -d myval 刪除此環境變數
在執行
fs0:\> test
test> echo -off
ABC 此環境變數被建立並設為0
[ 0 ]
1
執行第二次
fs0:\> test
test> echo -off
第二次執行並未進入此判斷條件中
[ 1 ]
2
fs0:\>
試試看吧!!!
你好,
回覆刪除請問一下在uefi中,有像windows的set /p可以等待使用者輸入變數值的指令嗎?
set指令裡目前沒有-p的參數,或許你可以用下列指令取代:
刪除1. pause(http://samfreetime.blogspot.tw/2011/10/efi-shell-commands-pause.html)中斷程式。
2. bcfg 開機選單管理指令(http://samfreetime.blogspot.hk/2012/09/efi-shell20-commands-bcfgnvram.html)。
3. 或自行撰寫一個應用程式吧!
你好,
回覆刪除請問在EFI Shell下能做到存取16進制的數字 並且對他做4次+1的動作
EX:A->B D->E F->0 如果到F後會回到一開始 重複0~F這樣的程式
感謝
將此程式存成t3.nsh
刪除======t3.nsh==================================
echo -off
if not exist %2% then
echo [[%2]]
set myval_xx %2%
endif
if exist %myval_xx% then
set myval_xx 0
endif
if not exist %1% then
echo [[%1]]
set myval_x %1%
endif
if exist %myval_x% then
set myval_x 0
endif
for %c in 1 2 3 4
set not_skip 1
if %myval_x% == F then
if %myval_xx% == F then
set myval_x 0
set myval_xx 0
set mylock_x 0
set mylock_xx 0
set not_skip 0
endif
endif
if %not_skip% == 1 then
set mylock_x 0
for %b in 0 1 2 3 4 5 6 7 8 9 A B C D E F
if %myval_x% == %b then
if %myval_xx% == F then
set myval_xx 0
set mylock_x 1
set mylock_xx 0
else
for %a in 0 1 2 3 4 5 6 7 8 9 A B C D E F
if %myval_xx% == %a then
set mylock_xx 1
else
if %mylock_xx% == 1 then
set mylock_xx 0
set myval_xx %a
set myval_x %b
endif
endif
endfor
endif
else
if %mylock_x% == 1 then
set mylock_x 0
set myval_x %b
endif
endif
endfor
endif
echo "0x%myval_x%%myval_xx%"
endfor
set -d mylock_x
set -d mylock_xx
echo -on
========================================
Examples:
輸入時英文請用大寫
fs0:\> t3.nsh F F
t3.nsh> echo -off
[[F]]
[[F]]
0x00
0x01
0x02
0x03
fs0:\> t3
t3> echo -off
0x04
0x05
0x06
0x07
fs0:\> t3
t3> echo -off
0x08
0x09
0x0A
0x0B
fs0:\> t3
t3> echo -off
0x0C
0x0D
0x0E
0x0F
fs0:\> t3
t3> echo -off
0x10
0x11
0x12
0x13
fs0:\> t3.nsh F E
t3.nsh> echo -off
[[E]]
[[F]]
0xFF
0x00
0x01
0x02
fs0:\> t3.nsh 5 5
t3.nsh> echo -off
[[5]]
[[5]]
0x56
0x57
0x58
0x59
試試看吧!!!!
非常謝謝Liao Ming-Yang 你的回覆幫助我很多 再次感謝你!!!
回覆刪除版大您好,
回覆刪除請問如何清楚計數次數呢?