DOS下如何声明变量(定义变量)

2019-01-30 01:21:50丽君


 

     set VAR=before  
     if "%VAR%" == "before" (  
       set VAR=after  
       if "%VAR%" == "after" @echo If you see this, it worked  
     )  
 

   不会显示消息,因为在读到第一个 IF 语句时,BOTH IF 语句中  
   的 %VAR% 会被代替;原因是: 它包含 IF 的文体,IF 是一个  
   复合语句。所以,复合语句中的 IF 实际上是在比较 "before" 和  
   "after",这两者永远不会相等。同样,以下这个例子也不会达到  
   预期效果:  

 


     set LIST=  
     for %i in (*) do set LIST=%LIST% %i  
     echo %LIST%  
 

   原因是,它不会在目前的目录中建立一个文件列表,而只是将  
   LIST 变量设成找到的最后一个文件。这也是因为 %LIST% 在  
   FOR 语句被读取时,只被扩充了一次;而且,那时的 LIST 变量  
   是空的。因此,我们真正执行的 FOR 循环是:  

     for %i in (*) do set LIST= %i  

   这个循环继续将 LIST 设成找到的最后一个文件。  

   延迟环境变量扩充允许您使用一个不同的字符(惊叹号)在执行  
   时间扩充环境变量。如果延迟的变量扩充被启用,可以将上面  
   例子写成以下所示,以达到预期效果:  

     set VAR=before  
     if "%VAR%" == "before" (  
       set VAR=after  
       if "!VAR!" == "after" @echo If you see this, it worked  
     )  

     set LIST=  
     for %i in (*) do set LIST=!LIST! %i  
     echo %LIST%  

   如果命令扩展被启用,有几个动态环境变量可以被扩展,但  
   不会出现在 SET 显示的变量列表中。每次变量数值被扩展时,  
   这些变量数值都会被动态计算。如果用户用这些名称中任何  
   一个定义变量,那个定义会替代下面描述的动态定义:  

   %CD% - 扩展到当前目录字符串。  

相关文章 大家在看