2

例を示すために、 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" %*

私はこれを理解していません:

  1. @ここで何を意味し、@"ruby.exe"二重引用符はどうなりますか?

ここにマニュアルで私はいくつかの説明を見つけました:

説明-最初の行はコマンドが表示されないようにします。「@echooff」の@は、その 行が表示されないようにします。

そして、これが私の2つのテストスクリプトです。

最初の1つ:

@ECHO OFF
@ECHO "123"
ECHO "123"
PAUSE

出力:

C:\win>batch.bat
"123"
"123"

@行が表示されないようにしません。

二番目:

gem environmentバッチファイルからコマンドを呼び出したい。そして、ここで私はbundle.batファイルからのコードによって導かれます。私のコード:

@ECHO OFF
@"gem environment"
PAUSE

出力はエラーです。2つの二重引用符に注意してください。

""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

だから私の質問は:

  1. @バッチスクリプトの文字の意味は何ですか?
  2. 後の値を二重引用符で囲む必要があるのは@いつですか?
4

1 に答える 1

7

質問1

Q1。バッチスクリプトの@文字の意味は何ですか?

文字は確かに行が表示されるの@を防ぎます。行の出力が表示されても、それが表示されるのを妨げることはありません。

したがって、たとえば:

echo foo

これを表示します:

echo foo
foo

@しかし、次のように追加します。

@echo foo

そして、あなたが得るのは出力だけです:

foo

一度回すecho offと、@とにかくどの線も表示されないので、は役に立ちません。


質問2

Q2。@の後に値を二重引用符で囲む必要があるのはいつですか?

サンプルコードの二重引用符は、とは何の関係もありません@。行が表示され@ないようにするだけです。

二重引用符は、パスにスペースが含まれているファイルを指すのに役立ちます。たとえば、次のようなプログラムを実行しようとすると、次のようになります。

C:\Program Files\foo.exe

シェルは最初のスペースまでしか解析しないため、という名前のファイルまたはコマンドを探しC:\Program、エラーを返します。

これに変更します:

"C:\Program Files\foo.exe"

存在する場合は、正しく検索しC:\Program Files\foo.exeて実行します。

あなたの場合、あなたがただ言うならばgem environment、それは名前が付けられたプログラムを見つけて、パラメータとしてgem.exe渡すことができます。environmentしかし、引用すると、、"gem environment"という名前の何かを探していgem environment.exeます。

于 2013-03-21T15:36:34.337 に答える