使用bat執行exe後批次檔未傳回正確的值

使用bat執行exe後批次檔未傳回正確的值

我對這個腳本有很多問題。它應該讀取檔案(用戶指定的)然後將其保存到storeresult環境變數中。

我使用的是 BAT 到 EXE 轉換器,它不會影響任何批次命令,所以事實並非如此。 (如果你想知道為什麼我打電話storvar而不是storvar.bat

主要腳本( storvar.exe):

set a=%~1
set b=%~2
set c=%~3
for /f "delims=" %%a in (stor\%a%.stor) do set storeresult=%%a
pause

我用來呼叫腳本的腳本(呼叫沒有錯誤):

storevar Hi hi
pause
echo %storeresult%
pause

當我調用它時,它只是返回結果(%storeresult%),什麼都沒有,我找不到問題所在!

答案1

當您嘗試定義和使用變數時,您必須始終注意它的範圍

使用set命令定義的環境變數僅在定義它們的進程範圍內有效。透過實驗很容易證明:

  1. 開啟一個命令提示字元並嘗試定義set a = b.用於set驗證其定義是否正確。
  2. 現在,打開第二個命令提示字元並呼叫set.你看,這a並沒有定義在這個範圍內。

storvar.exe是一個單獨的過程。因此,它有自己的範圍。您在其中定義的任何環境變數都會保留在那裡,並在退出時刪除。

那麼,還有其他選擇嗎?嗯,是。我自己使用 PowerShell 而不是已棄用的批次檔;它可以從文件中提取內容並直接使用它們或將它們發送到下一個腳本。 (Microsoft 官方支援將 PowerShell 編譯為 EXE,儘管您也可以在 TechNet Gallery 上找到新手的版本。)AutoIt 是另一種選擇。

相關內容