是否有可能將重定向指令存儲在變量中?沿着這些線路的東西:將重定向指令移動到變量?
set redirect=>> buildlog.txt 2>&1
nmake -f Makefile %redirect%
因爲,這是行不通的。
是否有可能將重定向指令存儲在變量中?沿着這些線路的東西:將重定向指令移動到變量?
set redirect=>> buildlog.txt 2>&1
nmake -f Makefile %redirect%
因爲,這是行不通的。
由於>
是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
完美,謝謝! –
'set「redirect = >> buildlog.txt 2>&1」'(引用避免需要轉義...) – aschipfl
你真正需要做的是利用延遲擴展。
@echo off
set "redirect=>> buildlog.txt 2>&1"
setlocal enabledelayedexpansion
nmake -f Makefile !redirect!
endlocal
這是另一種解決方案,謝謝! –
不,這不起作用。一旦你正確地獲得了變量中的'>'和'&',如果你想重定向起作用,就必須使用'%redirect%'。 – dbenham
你不得不將var分配放在引號中,因爲否則重定向將被應用到'set'命令,而不是字符'2','>'等等......被分配爲文本到變量。 –
@MarcB你能提供一個可行的例子嗎?我試過用引號,但它也不起作用... –
我不完全理解你想要在你的buildlog.txt文件中。你想讓buildlog.txt包含** set redirect = **嗎? – Squashman