让我bundle.bat从RubyInstaller中获取文件来表示一个例子.
@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" %*
Run Code Online (Sandbox Code Playgroud)
我不明白这个:
@这里的意思是@"ruby.exe"什么,双引号是什么意思?这本手册中,我发现了一些解释:
说明 - 第一行阻止显示命令,"@ echo off"中的@使该 行不显示.
这是我的两个测试脚本.
第一个:
@ECHO OFF
@ECHO "123"
ECHO "123"
PAUSE
Run Code Online (Sandbox Code Playgroud)
输出:
C:\win>batch.bat
"123"
"123"
Run Code Online (Sandbox Code Playgroud)
@ 不会阻止显示行.
第二:
我想gem environment从批处理文件中调用命令.在这里,我受到来自bundle.bat文件的代码的指导.我的代码:
@ECHO OFF
@"gem environment"
PAUSE
Run Code Online (Sandbox Code Playgroud)
输出是错误的.请注意两个双引号:
""gem environment"" is not a command or executable or package file.
Run Code Online (Sandbox Code Playgroud)
但bundle.bat在线上@"ruby.exe" "%~dpn0" %*工作.
现在我改变我的脚本:
@ECHO OFF
REM Call like this...
@gem environment
REM or call like this.
gem environment
PAUSE
Run Code Online (Sandbox Code Playgroud)
两者都很好.输出:
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
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
@批处理脚本中字符的含义是什么?@?Q1.批处理脚本中@字符的含义是什么?
该@角色确实阻止了线的显示.如果有的话,它不会阻止显示行的输出.
例如:
echo foo
Run Code Online (Sandbox Code Playgroud)
会显示这个:
echo foo
foo
Run Code Online (Sandbox Code Playgroud)
但添加@如下:
@echo foo
Run Code Online (Sandbox Code Playgroud)
而你得到的只是输出:
foo
Run Code Online (Sandbox Code Playgroud)
一旦你转动echo off,这@是没用的,因为无论如何都没有显示任何线条.
Q2.我何时必须在@之后加倍引用该值?
示例代码中的双引号与@.所有这些@都会导致不显示该行.
双引号对于指向其路径中包含空格的文件很有用.例如,如果您尝试运行这样的程序:
C:\Program Files\foo.exe
Run Code Online (Sandbox Code Playgroud)
shell只会将其解析到第一个空格,因此它会查找名为的文件或命令C:\Program,并返回错误.
把它改成这个:
"C:\Program Files\foo.exe"
Run Code Online (Sandbox Code Playgroud)
C:\Program Files\foo.exe如果存在,它将正确查找并运行它.
在你的情况下,如果你只是说gem environment,它可以找到命名的程序gem.exe并environment作为参数传入.但如果你引用它,"gem environment"它正在寻找一些名字gem environment.exe.