Batch file @在Windows批处理脚本中的含义是什么?
让我以bundle.bat文件为例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将阻
@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的东西。你应该把它们作为三个独立的问题来问,因为它们需要三个独立的答案。同意,我最好删除第三个。现在我看到了不同之处,可能是重复的。非常感谢你。