批处理脚本set命令无法正常工作 [英] Batch script set command not working properly

查看:137
本文介绍了批处理脚本set命令无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从文件中读取的第一行,我将其设置为环境变量。下面是我用的变量

I am trying to read the first line from a file and I am setting it as environment variable. Below is the variable I use

@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

Assuming the test.dat contains the path to JDK and if it is c:\JDK1.6

在运行它的第一次,我得到

on running it for the first time I get

ECHO is off.
ECHO is off.

再次运行,我得到

on running again I get

c:\JDK1.6
\bin\java

和上重新运行,我得到

c:\JDK1.6
c:\JDK1.6\bin\java

我不力改变test.dat的文件。但是,为什么会出现这种情况?只有当我运行第三次所有的变量就设置?看起来怪怪的。我在做什么错在这?请帮助我。

I dint change the test.dat file. But why is this happening ? Only when I run for third time all the variables getting set ? Looks weird. Am I doing anything wrong in this ? Please help me out.

推荐答案

批量总是与它的当前值的任何语句替换任何%VAR%,然后运行该语句。您的IF语句由关键字IF在封闭括号中运行。

Batch always replaces any %var% in any statement with its CURRENT value and THEN runs the statement. Your IF statement runs from the IF keyword to the closing-parenthesis.

在为第一次运行时,一批替代品(无) Java_home_path JAVA_PATH 所以 ECHO%java_home_path%是PTED为echo`间$ p $和批次报告其ECHO状态。

On the first run, batch substitutes (nothing) for Java_home_path and for java_path so the ECHO %java_home_path% is interpreted as 'echo` and batch reports its ECHO status.

然而, java_home_path 设置为 C:\\ JDK1.6 测试。 DAT ,但 JAVA_PATH 设置为(无)\\ BIN \\ java中

HOWEVER, java_home_path is set to c:\JDK1.6 from test.dat but JAVA_PATH is set to (nothing)\bin\java

在第二轮中,这些现有的值进行适当的报告, java_home_path 设置从 TEST.DAT JAVA_PATH 设置为 C:\\ JDK1.6 \\ BIN \\ java中

On the second run, these existing values are duly reported, java_home_path is set from test.dat and JAVA_PATH is set to c:\JDK1.6\bin\java

在第三次运行,你得到你所期望的报姓名。

On the third run, you get the names you expect reported.

固化:(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!
  )

治疗:(1)

@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%

这篇关于批处理脚本set命令无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆