当前位置:  开发笔记 > 编程语言 > 正文

批处理文件,vista x64,if和括号

如何解决《批处理文件,vistax64,if和括号》经验,为你挑选了1个好方法。

Windows上的某些批​​处理文件使用带有多行的IF语法,如下所示:

if var==rule (
  some comands
) else (
  else commands
)

现在,Windows Vista x64决定将所有32位文件放在"C:\ Program Files(x86)"下.不幸的是,每当你在没有引号的多行IF中使用环境变量(例如PATH)时,变量值内的括号会混淆IF,从而中止批处理文件.例如:

if "%OS%"=="Windows_NT" (
  @setlocal
  call :set_home
  set _ARGS=%*
) else (
  set _SCALA_HOME=%SCALA_HOME%
  rem The following line tests SCALA_HOME instead of _SCALA_HOME, because
  rem the above change to _SCALA_HOME is not visible within this block.
  if "%SCALA_HOME%"=="" goto error1
  call :set_args
)

即使%SCALA_HOME%出现的行未执行,带有此文件的批处理文件也将失败.这很烦人.这有解决方案吗?



1> j_random_hac..:

更改%SCALA_HOME%to的所有实例!SCALA_HOME!,并在文件顶部附近添加以下内容:

setlocal enableextensions enabledelayedexpansion

后者打开"延迟变量扩展",这意味着在表单!VAR!中写入的变量在使用之前不会扩展,而不是在解析语句本身时.(在我有限的经验中,当然在这种情况下,这意味着变量扩展不太可能被误解为实际的批处理文件语法结构.)感谢Patrick Cuff在评论中指出这种更好的方式.

PS:正如您所发现的那样,cmd.exe批处理文件语言在很多方面都被严重破坏.如果您不能使用真正的脚本语言(例如,如果您的任务需要在其他计算机上执行),我会认真地推荐使用快速的C/C++"脚本"来完成工作,并将其编译为.EXE.

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有