簡體   English   中英

批處理腳本設置命令無法正常工作

[英]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_pathjava_path因此ECHO %java_home_path%被解釋為“echo”並批處理報告其 ECHO 狀態。

但是, java_home_pathtest.dat設置為c:\\JDK1.6JAVA_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM