是否有可能将重定向指令存储在变量中?沿着这些线路的东西:将重定向指令移动到变量?
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