2016-09-23 52 views
0

是否有可能將重定向指令存儲在變量中?沿着這些線路的東西:將重定向指令移動到變量?

set redirect=>> buildlog.txt 2>&1 

nmake -f Makefile %redirect% 

因爲,這是行不通的。

+0

你不得不將var分配放在引號中,因爲否則重定向將被應用到'set'命令,而不是字符'2','>'等等......被分配爲文本到變量。 –

+0

@MarcB你能提供一個可行的例子嗎?我試過用引號,但它也不起作用... –

+0

我不完全理解你想要在你的buildlog.txt文件中。你想讓buildlog.txt包含** set redirect = **嗎? – Squashman

回答

2

由於>是shell元字符,因此不能直接使用它們來爲變量指定文本。它們將被shell執行並且它們的RESULT被賦值。所以,你必須報/轉義:

set redirect=^>^>buildlog.txt 2^>^&1 
      ^-^--etc... cmd uses^to escape. 

,然後工作,你希望:

C:\temp\z>set foo=^>^>log.txt 
C:\temp\z>dir %foo% 
C:\temp\z>dir 
Volume in drive C is Windows7_OS 
Volume Serial Number is 0E31-0E35 

Directory of C:\temp\z 

09/23/2016 10:32 AM <DIR>   . 
09/23/2016 10:32 AM <DIR>   .. 
09/23/2016 10:32 AM    333 log.txt 
       1 File(s)   333 bytes 
       2 Dir(s) 274,917,388,288 bytes free 

C:\temp\z>type log.txt 
Volume in drive C is Windows7_OS 
Volume Serial Number is 0E31-0E35 

Directory of C:\temp\z 

09/23/2016 10:32 AM <DIR>   . 
09/23/2016 10:32 AM <DIR>   .. 
09/23/2016 10:32 AM     0 log.txt 
       1 File(s)    0 bytes 
       2 Dir(s) 274,917,388,288 bytes free 
+0

完美,謝謝! –

+1

'set「redirect = >> buildlog.txt 2>&1」'(引用避免需要轉義...) – aschipfl

0

你真正需要做的是利用延遲擴展。

@echo off 
set "redirect=>> buildlog.txt 2>&1" 

setlocal enabledelayedexpansion 
nmake -f Makefile !redirect! 
endlocal 
+0

這是另一種解決方案,謝謝! –

+0

不,這不起作用。一旦你正確地獲得了變量中的'>'和'&',如果你想重定向起作用,就必須使用'%redirect%'。 – dbenham