2013-02-12 55 views
1

我有种与cmd.exe的挣扎,所以让我把这个代码:CMD环境变量的行为目前还不清楚

  :: Set an environment variable var to `pwd` 
      :: (forget about the backslashes) 
C:\somedir>set var=C:\\\somedir\\\ & call echo %var% 
C:\\\somedir\\\  

      :: great! works. 
      :: Is the environment variable really there? 
C:\somedir>set v 
var=C:\\\somedir\\\  

      :: yes. ok. 
      :: Traverse directory recursively, find class files ending with T, 
      :: delete `pwd` from filenames: 
C:\somedir>dir /s /b *T.class | grep T\. | sed 's/%var%//g' 
C:\somedir\domain\test\ClassT.class 

      :: uh oh no! Didn't work. 
      :: Wait a minute. Is the environment variable really there? 
C:\somedir>set v 
var=C:\\\somedir\\\     

      :: hmm...yes, indeed? 
      :: ok. Take a breath. Start over. Empty/Delete var. 
C:\somedir>set var= 

      :: Manually fill var 
C:\somedir>set var=C:\\\somedir\\\ 

      :: Try again... 
C:\somedir>dir /s /b *T.class | grep T\. | sed 's/%var%//g' 
domain\test\ClassT.class   

      ::YES! uh...oh...no...w**hy does it not work above? 

的问题是,为什么我不能用var在管道虽然是在环境中可用,当我设置var“手动”而不是set var=C:\\\somedir\\\ & call echo %var%时,发生了什么变化,对于第一部分,完全合法的手工清单中的后面部分是完全合法的。

回答

2

在这种情况下,您实际上将var设置为c:\\\somedir\\\<whitespace> 是的,对于设置变量,cmd不是很聪明。

在后面的例子中,您可能会在达到“\”时立即回车。 ():

(SET VAR=c:\\\windows\\\) & echo %VAR% 
:: Test for trailing space... 
echo [%VAR%]