在命令行中,"@"的意思是什么?

36 浏览
0 Comments

在命令行中,"@"的意思是什么?

我从Unreal Build Tool中找到了一些执行命令:

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命令行。有PowerShell的等效命令吗?

0
0 Comments

在命令行中,"@"符号具有不同的含义和用法。首先,当在命令行中调用"cl.exe"时,以"@"为前缀的文件名表示一个"response file",这是一个包含通常用作命令行参数的文本文件,"在命令行参数超过127个字符时非常有用"。

在PowerShell中,"@"是一个元字符(具有特殊含义的字符),需要将其转义为"`@"或将其作为引用字符串的一部分,这在cmd.exe或批处理文件中也可以工作:

# PowerShell
# 将@转义为`@
cl `@"F:\x\cc.txt"
# 或者,将@作为引用字符串的一部分,
# 这在cmd.exe或批处理文件中也可以工作。
cl ":\x\cc.txt"

上述对于"@"的使用,作为参数的一部分,是特定于所调用的程序"cl.exe"的。

相比之下,在命令的开头使用"@"始终由调用的shell(cmd.exe或PowerShell)进行解释:

- cmd.exe:命令开头的"@"会抑制在打印输出之前打印该命令(就像在执行之前执行"echo off"一样,但作用范围仅限于该命令)

- 因此,仅执行"@"F:\x\cc.txt",会执行"F:\x\cc.txt",而不会首先打印执行的命令。(注意,如果没有"@ ",则仅在从不以"off"开始的批处理文件中执行时才会打印该命令。)

- PowerShell:在语句开头的"@"只能启动以下构造之一:

- 一个here-string(@"..."@或@'...'@)

- 一个数组子表达式操作(@())

- 因此,尝试仅执行"@"F:\x\cc.txt"将导致语法错误。

"@"符号在命令行中具有不同的含义和用法,具体取决于所调用的程序和shell的不同。

0