請選擇 進入手機版 | 繼續訪問電腦版

NoName Team 電腦資訊討論區

 找回密碼
 我要註冊
搜索
查看: 528|回復: 18

[問題] shellx64.efi 版本

[複製鏈接]
發表於 2019-12-27 17:02:05 | 顯示全部樓層 |閱讀模式
本帖最後由 start1119 於 2019-12-27 17:05 編輯

有人知道
哪個版本可以跑
下列code嗎?
已測試 UEFI V2.1 V2.2 卡在Line 10 if exist %Counter% then
V2.6曾經可以跑現在卡在Line 18 for %a run (%Counter% 19999)

#存檔成Startup.nsh
[Bash shell] 純文本查看 復制代碼
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
#=======================

正常執行會自動重開機與記錄開機次數


發表於 2019-12-27 20:51:03 | 顯示全部樓層
if exist  是用在檔案吧...不是 變數
另外你 for %a  ...  for endfor 中...應該用 %a 不是 %a%

還有 for %a run (start end step) ... start  初始值 最小好像不能是 0 ...最小要從 1 開始
for %a run(0 19999) ... %a 可能會直接給 19999
for %a run (1 19999) ... %a 才會由 1 開始給

[Bash shell] 純文本查看 復制代碼
@echo -off
 
#set Startup delay time for 0 sec
#=======================
set StartupDelay 0
#=======================

# if Counter not set 
#======================= 
if "%Counter%" == "" then
  set Counter 1
endif
#=======================

# set Counter+1
#=======================
for %a run (%Counter% 1%Counter%)
  set Counter+1 %a
  if "%Counter%" ne "%a" then
    goto Leave_For
  endif
endfor
#=======================
 
#Wait for 3 sec then system warm reboot
#=======================
:Leave_For
 echo Loop Cycle = %Counter%
 set Counter %Counter+1%
 set -d Counter+1
 stall 3000000
 reset -w
#=======================
 樓主| 發表於 2019-12-30 14:19:52 | 顯示全部樓層
阿達金田一 發表於 2019-12-27 20:51
if exist  是用在檔案吧...不是 變數
另外你 for %a  ...  for endfor 中...應該用 %a 不是 %a%

EFI Shell version 2.60 [5.13]
Current running mode 1.1.2
版本有差
卡在 if: Incorrect syntax(line 19)
 樓主| 發表於 2019-12-30 14:27:14 | 顯示全部樓層
檔案名稱 : bootx64.efi
檔案大小  : 743 KB (760,928 位元組)
SHA1: 67F9D60E3BD0F928B4AE3C2820B473DD98DB9A3F
發文驗證碼  :v65owqztkultxfa
 樓主| 發表於 2019-12-30 14:33:29 | 顯示全部樓層
start1119 發表於 2019-12-30 14:27
檔案名稱 : bootx64.efi
檔案大小  : 743 KB (760,928 位元組)
SHA1: 67F9D60E3BD0F928B4AE3C2820B473DD98D ...

使用此版本可以執行我貼的code
另外想問要如何將數據存到檔案.txt?
使用  >%Counter%.txt 只會存第一次
後面的會錯誤
例如存了43.txt
44就顯示
Shell: Could not open output file 44.txt
然後.txt檔案都不見了
發表於 2019-12-31 05:06:03 | 顯示全部樓層
本帖最後由 阿達金田一 於 2019-12-31 07:33 編輯

我這沒環境測...
我之前是用 vbox 的 uefi shell ( shell 好像是 2.1 但 uefi 是 2.4)

執行你給的 bootx64.efi ...可以執行... ( 顯示 EFI Shell version 2.40 [1.0] ... 推測是 UEFI ver 而不是 shell )
但執行完 map 就丟失了 連 fs0: 都進不了
然後 exit 回原本的 uefi shell ...
連原本的 uefi shell 也會出問題 ...
set 問題 ... 以有的變數還可以 set ... 但不能新增變數
map 問題...可以看的到但不能切換到 fs0: ... 但可以用 fs0: 中的檔案

可能和 vbox 的 uefi 有衝突...
而且 vbox uefi 只是模擬...可能也有問題...相容差

把你最新的 code 貼上來... 你卡 line19 是你原本那個嗎... %a% 沒有改成 %a 嗎

另外 code 你是找
http://necomeow.blogspot.com/201 ... counter-reboot.html
那個是用下面這個改的
http://huabios.blogspot.com/2016 ... reboot-counter.html

你可看 code 不一樣...是有改過的...原本的也是用 %a ... 不是 %a% 那應該是改錯的

使用  >%Counter%.txt 只會存第一次

這個給我看 code 不然不知道...
基本上應該只要注意 output file 的路徑...大多不會錯
> 前後都要空一格空白比較好
如果 當前目錄 是 shell> ... 最好是指定 output file 路徑 ... 因為沒有路徑 .nsh 是寫入 當前目錄
例如
FS0:
echo test > test.txt ... 這會寫入 FS0:\text.txt

通常 auto startup.nsh 應該會自動切到 startup.nsh 的裝置

如果是 當前目錄是 shell>
echo text > text.txt 則會出錯 ...不過這個錯誤是 當前目錄錯誤
你那個訊息看上去比較像無法開啟檔案...例如 唯讀 之類的情況
 樓主| 發表於 2019-12-31 10:14:14 | 顯示全部樓層
阿達金田一 發表於 2019-12-31 05:06
我這沒環境測...
我之前是用 vbox 的 uefi shell ( shell 好像是 2.1 但 uefi 是 2.4)

我卡的19行是   if "%Counter%" ne "%a" then
在我給的bootx64.efi 下出現的錯誤
在虛擬機直接跑你給的code ok
這很奇怪
中間不知有什麼差異

存檔部分是需要 code 跑完後重開機之前存成txt 之類的檔案
[Bash shell] 純文本查看 復制代碼
@echo -off
  
#set Startup delay time for 0 sec
#=======================
set StartupDelay 0
#=======================
 
# if Counter not set 
#======================= 
if "%Counter%" == "" then
  set Counter 1
endif
#=======================
 
# set Counter+1
#=======================
for %a run (%Counter% 1%Counter%)
  set Counter+1 %a
  if "%Counter%" ne "%a" then
##在這存檔?
    goto Leave_For
  endif
endfor
#=======================
  
#Wait for 3 sec then system warm reboot
#=======================
:Leave_For
 echo Loop Cycle = %Counter%
##加在這存檔?
 set Counter %Counter+1%
 set -d Counter+1
 stall 3000000
 reset -w
#=======================

存檔名稱可能需要 pci time date %Counter% 等資訊
 樓主| 發表於 2019-12-31 10:26:55 | 顯示全部樓層
我存檔加這時
[Bash shell] 純文本查看 復制代碼
#Wait for 3 sec then system warm reboot
#=======================
:Leave_For
 echo Loop Cycle = %Counter%
 echo "%Counter%" >> %Counter%.txt
 set Counter %Counter+1%
 set -d Counter+1
 stall 3000000
 reset -w
#=======================

7.txt 正常
8就出錯了
Loop Cycle = 8
Unable to redirect file.
Script Error Status: Invalid Parameter (line number 29)
原本想說每個檔名不同 結果還會出錯
 樓主| 發表於 2019-12-31 17:33:03 | 顯示全部樓層
發現單獨存檔沒問題
使用startup.nsh就會出現問題
[Bash shell] 純文本查看 復制代碼
echo "%Counter%" >> %Counter%.txt

自動重開會顯示 Script Error Status: Invalid Parameter
發表於 2020-1-1 02:46:58 | 顯示全部樓層
本帖最後由 阿達金田一 於 2020-1-1 04:28 編輯
start1119 發表於 2019-12-31 17:33
發現單獨存檔沒問題
使用startup.nsh就會出現問題

這就是我前面說的路徑問題...
auto startup.nsh 可能當前路徑是 shell> ...不是 fs0:\
(這個我前面有說錯...我剛試一下...不會切到 fs0: 是 shell 沒錯)
所以 直接 > %Counter%.txt 是不行的

下面的 code 我加了 尋找 startup.nsh 的路徑
至於 if 錯誤推測 ... 可能是 不同版本 shell  對 if 的 字串 數字 判斷處理有一些差別
ne lt gt 這些是對數字
==  是對 字串
然後我用 vbox 的是可以正常 ne
可能部份 shell  ... if " " 就直接定為 字串 ... 數字 不能用 " "


[Bash shell] 純文本查看 復制代碼
@echo -off

# Set Startup delay time for 0 sec
set StartupDelay 0

# Check Counter
if not IsInt(%Counter%) then
   set Counter 1
   goto Leave_For1
endif
for %a run (%Counter% 1%Counter%)
    if %Counter% ne %a then
       set Counter %a
       goto Leave_For1
    endif
endfor
:Leave_For1
if %Counter% lt 1 then
   set Counter 1
endif 

# Check and cd startup.nsh path
for %b in fs0 fs1 fs2 fs3 blk0 blk1 blk2 blk3
    if exist %b:\startup.nsh then
       %b:
       cd\
       goto Leave_For2
    endif
endfor
:Leave_For2

# Set Log File
set Log startup.nsh.%Counter%.log

echo Boot Coutner = %Counter%
echo Boot Coutner = %Counter% >> %Log%
echo Current Working Directory = %cwd%
echo Current Working Directory = %cwd% >> %Log%
date >> %Log%
time >> %Log%
echo " " >> %Log%
echo === PCI === >> %Log%
pci >> %Log%

#Wait for 3 sec then system warm reboot
stall 3000000
reset -w

您需要登錄後才可以回帖 登錄 | 我要註冊

本版積分規則

小黑屋|手機版|NoName Team 電腦資訊討論區 |網站地圖

GMT+8, 2020-3-30 03:14 , Processed in 0.090676 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表