让我从RubyInstaller获取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 the manual我找到了一些解释:
说明 - 第一行阻止命令 显示,“@echo off”中的@保持 行显示。
这是我的两个测试脚本。
第一个:
@ECHO OFF
@ECHO "123"
ECHO "123"
PAUSE
输出:
C:\win>batch.bat
"123"
"123"
@
不会阻止显示行。
第二个:
我想从批处理文件中调用gem environment
命令。在这里,我遵循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
两者都很好。输出:
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
所以我的问题是:
@
字符的含义是什么?@
之后重复引用该值?答案 0 :(得分:7)
Q1。批处理脚本中@字符的含义是什么?
@
字符确实会阻止显示该行。如果有的话,它不会阻止显示行的输出。
例如:
echo foo
会显示:
echo foo
foo
但是像这样添加@
:
@echo foo
你得到的就是输出:
foo
转为echo off
后,@
无用,因为无论如何都没有显示任何行。
Q2。我何时必须在@?
之后双引号示例代码中的双引号与@
无关。所有@
都会导致该行无法显示。
双引号对于指向其路径中包含空格的文件很有用。例如,如果您尝试运行如下程序:
C:\Program Files\foo.exe
shell只会将其解析到第一个空格,因此它会查找名为C:\Program
的文件或命令,并返回错误。
将其更改为:
"C:\Program Files\foo.exe"
它将正确查找C:\Program Files\foo.exe
并运行它(如果存在)。
在您的情况下,如果您只是说gem environment
,它可以找到名为gem.exe
的程序并传入environment
作为参数。但如果你引用它"gem environment"
,它就会找到一个名为gem environment.exe
的东西。