[英]Batch script set command not working properly
我正在嘗試從文件中讀取第一行,並將其設置為環境變量。 下面是我使用的變量
@echo off
if EXIST "test.dat" (
set JAVA_HOME_PATH=
set JAVA_PATH=
set /p JAVA_HOME_PATH=<test.dat
echo %JAVA_HOME_PATH%
set JAVA_PATH=%JAVA_HOME_PATH%\bin\java
echo %JAVA_PATH%
)
假設 test.dat 包含 JDK 的路徑,如果它是 c:\\JDK1.6
我第一次運行它時
ECHO is off.
ECHO is off.
再次運行我得到
c:\JDK1.6
\bin\java
再次運行時,我得到
c:\JDK1.6
c:\JDK1.6\bin\java
我不會更改 test.dat 文件。 但為什么會這樣呢? 只有當我第三次運行所有變量時才設置? 看起來很奇怪。 我做錯了什么嗎?
Batch 始終將任何語句中的任何 %var% 替換為其 CURRENT 值,然后運行該語句。 您的 IF 語句從 IF 關鍵字運行到右括號。
在第一次運行時,批處理替換(無) Java_home_path
和java_path
因此ECHO %java_home_path%
被解釋為“echo”並批處理報告其 ECHO 狀態。
但是, java_home_path
從test.dat
設置為c:\\JDK1.6
但JAVA_PATH
設置為(nothing)\\bin\\java
在第二次運行時,這些現有值被適當地報告, java_home_path
是從test.dat
設置的, JAVA_PATH
被設置為c:\\JDK1.6\\bin\\java
在第三次運行時,您會得到您期望報告的名稱。
治愈:(1)
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
if EXIST "test.dat" (
set JAVA_HOME_PATH=
set JAVA_PATH=
set /p JAVA_HOME_PATH=<test.dat
echo !JAVA_HOME_PATH!
set JAVA_PATH=%JAVA_HOME_PATH%\bin\java
echo !JAVA_PATH!
)
治療:(2)
@echo off
if not EXIST "test.dat" ECHO No test.dat&goto :eof
set JAVA_HOME_PATH=
set JAVA_PATH=
set /p JAVA_HOME_PATH=<test.dat
echo %JAVA_HOME_PATH%
set JAVA_PATH=%JAVA_HOME_PATH%\bin\java
echo %JAVA_PATH%
您的問題是Delayed Expansion of variables 之一。
要修復它,只需更改您的腳本以包含SETLOCAL ENABLEDELAYEDEXPANSION
,然后使用!!
而不是%%
像這樣:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
if EXIST "test.dat" (
set JAVA_HOME_PATH=
set JAVA_PATH=
set /p JAVA_HOME_PATH=<test.dat
echo !JAVA_HOME_PATH!
set JAVA_PATH=!JAVA_HOME_PATH!\bin\java
echo !JAVA_PATH!
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.