UEFI Shell Reboot Counter, 建立會計算次數的Reboot計數器

在此紀錄一個在UEFI Shell底下執行的Reboot程式~
圖片來源

程式碼來源:小花的胡言亂語
使用方式:
1. 將Code1存成Startup.nsh。
2. 製作可開機的UEFI隨身碟。
3. 將Startup.nsh存在隨身碟內,路徑(隨身碟\EFI\boot\Startup.nsh)。
4. 系統開機,將隨身碟開機順序設為第一優先。
5. boot進UEFI隨身碟。
6. cd 至該隨身碟\EFI\boot\底下,並執行Startup.nsh即可。
如何重置腳本次數→請參考Code2。

Code1↓
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
echo -off

#set Startup delay time for 0 sec
#=======================
set StartupDelay 0
#=======================

#if Counter is not exist , set to 0
#=======================
if exist %Counter% then
  set Counter 0
endif
#=======================

#Counter from 0-19999
#if match, set myFlag , Counter will +1 in next loop
#=======================
for %a run (%Counter% 19999)
 if %Counter% == %a% then
  set myFlag 1
 else
  if %myFlag% == 1 then
  set myFlag 0
   set Counter %a%
    goto Leave_For
  endif
 endif
endfor
#=======================

#Wait for 3 sec then system warm reboot
#=======================
:Leave_For
 echo Loop Cycle = %Counter%
 stall 3000000
 reset -w
#=======================

如何清除腳本次數?
1. 將Code2存成Clear.nsh並放置隨身碟\EFI\boot底下。
2. 系統開機,boot進隨身碟後馬上按「ESC」停止Startup.nsh自動執行。
3. cd進隨身碟\EFI\boot並執行Clear.nsh即可。

原理:因Code1 使用了"Counter", "a", "myFlag"這些變數,只要把「系統」內暫存的這些變數刪掉即可。
Code2↓
1
2
3
4
5
6
echo -off
set -d Counter
set -d a
set -d myFlag

echo Clean Complete, please re-run Startup.nsh

備註:
1. UEFI Shell User's Guide
2. 檔名為何是Startup.nsh?
就如同AUTOEXEC.BAT一樣,是在系統載入時便會自動執行的一個腳本。在設為隨身碟開機順序為第一優先後, 系統boot進隨身碟時便會自動執行Startup.nsh,也就是說檔名改掉後腳本就不會自動執行囉!

留言

  1. 版大您好
    請問您的UEFI 版本是?
    我測試code1在uefi v2.1 v2.2都不能跑卡在10行
    uefi v2.6有跑成功過後來又不行了卡在18行
    code2都說找不到變數
    謝謝

    回覆刪除

張貼留言