命令行中的“ @”是什么意思?

时间:2019-08-21 03:02:00

标签: powershell batch-file cmd syntax

我从虚幻构建工具中找到了一些执行命令:

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相当的产品吗?

1 个答案:

答案 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:@在语句开头只能启动以下结构之一: