我从虚幻构建工具中找到了一些执行命令:
C:\VisualStudio\IDE2017\VC\Tools\MSVC\14.16.27023\bin\HostX64\x64\cl.exe @"C:\MessageTag\Intermediate\Build\Win64\MessageTest\Development\DesktopPlatform\Module.DesktopPlatform.cpp.obj.response" /showIncludes
我测试了一个简单的命令行
cl @"F:\x\cc.txt"
文件内容为cc.txt:
x.cpp
-Fe"y.exe"
y.exe已创建,似乎文件“ cc.txt”中的行已链接为字符串。
但是,如果我只输入以下内容:
@"F:\x\cc.txt"
在命令行中,打开文本文件,既不显示文件内容也不执行文件内容的第一行。
“ @”到底做什么?有文档吗?
进一步的问题:这仅适用于cmd。有与Powerhsell相当的产品吗?
答案 0 :(得分:4)
调用cl.exe
时,以@
为前缀的文件名表示response file ,这是一个文本文件,通常包含命令行参数,“如果您的命令行参数超过127个字符,则很有用。”
在PowerShell中,@
是一个元字符(具有特殊含义的字符),您需要将其转为`@
或使其成为带引号的字符串的一部分,这也应从{{ 1}} /批处理文件:
cmd.exe
上述# PowerShell
# Escape @ as `@
cl `@"F:\x\cc.txt"
#`# Alternatively, make @ part of the quoted string,
# which also works from cmd.exe / a batch file.
cl "@F:\x\cc.txt"
的使用是 argument 的一部分,特定于被调用的程序@
。
相比之下,在调用 shell 时(总是)在命令的开始处使用cl.exe
({或PowerShell):
@
:命令开头的cmd.exe
在打印输出之前禁止回显该命令(就像事先执行cmd.exe
一样,但范围仅限于手头的命令)
@
会执行echo off
-打开该文件进行编辑-无需先回显正在执行的命令。 (请注意,如果没有@"F:\x\cc.txt"
,则仅当从不以"F:\x\cc.txt"
开头的批处理文件中执行命令时,才会回显该命令。) PowerShell:@
在语句开头只能启动以下结构之一:
@echo off
或@
)一个array-subexpression operation(@"<newline>...<newline>"@
)
因此,尝试自行执行@'<newline>...<newline>'@
会导致语法错误。