Batch file @在Windows批处理脚本中的含义是什么?

Batch file @在Windows批处理脚本中的含义是什么?,batch-file,Batch File,让我以bundle.bat文件为例 @ECHO OFF IF NOT "%~f0" == "~f0" GOTO :WinNT @"ruby.exe" "C:/Ruby200/bin/bundle" %1 %2 %3 %4 %5 %6 %7 %8 %9 GOTO :EOF :WinNT @"ruby.exe" "%~dpn0" %* 我不明白这一点: @ruby.exe在这里是什么意思?双引号是什么意思? 在这里我找到了一些解释: 解释-第一行阻止命令被执行 显示时,@in@echo off将阻

让我以bundle.bat文件为例

@ECHO OFF
IF NOT "%~f0" == "~f0" GOTO :WinNT
@"ruby.exe" "C:/Ruby200/bin/bundle" %1 %2 %3 %4 %5 %6 %7 %8 %9
GOTO :EOF
:WinNT
@"ruby.exe" "%~dpn0" %*
我不明白这一点:

@ruby.exe在这里是什么意思?双引号是什么意思? 在这里我找到了一些解释:

解释-第一行阻止命令被执行 显示时,@in@echo off将阻止该行显示

这是我的两个测试脚本

第一个:

输出:

C:\win>batch.bat
"123"
"123"
RubyGems Environment:
  - RUBYGEMS VERSION: 2.0.3
  - RUBY VERSION: 2.0.0 (2013-02-24 patchlevel 0) [i386-mingw32]
  - INSTALLATION DIRECTORY: C:/Ruby200/lib/ruby/gems/2.0.0
  - RUBY EXECUTABLE: C:/Ruby200/bin/ruby.exe
  - EXECUTABLE DIRECTORY: C:/Ruby200/bin
  ... and so on
foo
@不阻止显示行

第二点:

我想从批处理文件调用gem环境命令。在这里,我以bundle.bat文件中的代码为指导。我的代码:

@ECHO OFF
@"gem environment"
PAUSE
输出是一个错误。请注意两个双引号:

""gem environment"" is not a command or executable or package file.
但是在bundle.bat中,@ruby.exe%~dpn0%*行可以工作

现在我更改脚本:

@ECHO OFF
REM Call like this...
@gem environment
REM or call like this.
gem environment
PAUSE
两者都很好。输出:

C:\win>batch.bat
"123"
"123"
RubyGems Environment:
  - RUBYGEMS VERSION: 2.0.3
  - RUBY VERSION: 2.0.0 (2013-02-24 patchlevel 0) [i386-mingw32]
  - INSTALLATION DIRECTORY: C:/Ruby200/lib/ruby/gems/2.0.0
  - RUBY EXECUTABLE: C:/Ruby200/bin/ruby.exe
  - EXECUTABLE DIRECTORY: C:/Ruby200/bin
  ... and so on
foo
因此,我的问题是:

批处理脚本中@字符的含义是什么? 什么时候我必须在@之后加上双引号? 问题1 问题1。批处理脚本中@字符的含义是什么

@character确实阻止显示该行。它不会阻止显示行的输出(如果有)

例如:

echo foo
将显示以下内容:

echo foo
foo
但添加@如下所示:

@echo foo
C:\Program Files\foo.exe
您所得到的只是输出:

C:\win>batch.bat
"123"
"123"
RubyGems Environment:
  - RUBYGEMS VERSION: 2.0.3
  - RUBY VERSION: 2.0.0 (2013-02-24 patchlevel 0) [i386-mingw32]
  - INSTALLATION DIRECTORY: C:/Ruby200/lib/ruby/gems/2.0.0
  - RUBY EXECUTABLE: C:/Ruby200/bin/ruby.exe
  - EXECUTABLE DIRECTORY: C:/Ruby200/bin
  ... and so on
foo
关闭echo后,@就没用了,因为没有任何行显示出来

问题2 问题2。什么时候我必须在@之后加上双引号

示例代码中的双引号与@无关。所有@does都会导致该行不显示

双引号用于指向路径中包含空格的文件。例如,如果您尝试运行以下程序:

@echo foo
C:\Program Files\foo.exe
shell将只解析第一个空格,因此它将查找名为C:\Program的文件或命令,并将返回一个错误

将其更改为:

"C:\Program Files\foo.exe"
它将正确地查找C:\Program Files\foo.exe,并在它存在时运行它


在您的情况下,如果您只说gem-environment,它可以找到名为gem.exe的程序,并将环境作为参数传入。但是如果你引用它的话,gem-environment,它正在寻找一个名为gem-environment.exe的东西。

你应该把它们作为三个独立的问题来问,因为它们需要三个独立的答案。同意,我最好删除第三个。现在我看到了不同之处,可能是重复的。非常感谢你。