2013-02-12 54 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%]