cmdの「(」の意味は何ですか?

cmdの「(」の意味は何ですか?

を入力するたびに(、つまり開き括弧の中にコマンド・プロンプト、次のようになります:

(
More? 

入力を続けると( または その他の文字、同じメッセージが表示されます。これは停止されます、と入力すると)、つまり、閉じ括弧ただし、次のようなエラーが表示されます。

) was unexpected at this time

それ以外では、私はこのコマンドが何をするのかわかりませんでした. それが何をするのか何か分かりますか?

答え1

() は実際にはコマンドではなく、CMD シェルが通常 1 つのコマンドが表示されることを期待する場所で、一連のコマンドをグループ化して使用できるグループ化演算子です。
() 間のコマンドは、実際には CMD の別のインスタンスで実行されます。手動で「(」と入力すると、その新しいインスタンスが入力され、コマンドを待機します。

if not exist c:\myfile (
  echo File doesn't exist
) else (
  echo File DOES exists
  del c:\myfile
)

通常、IF ELSE は同じ行に記述する必要があり、THEN 句と ELSE 句では 1 つのコマンドしか実行できないことに注意してください。
"()" を使用すると、(xxxxx) ブロック全体が 1 つのコマンドとして扱われ、同じ行に記述されているかのように扱われます。

答え2

すでに多くの有益な情報がここに投稿されています。例えば、括弧は「CMD シェルが通常単一のコマンドを表示することを期待する場所で、一連のコマンドをグループ化して使用できるグループ化演算子」それ「はブロック開始そしてエンドブロック— しかし、いくつかの単純なことが見落とされています。

1. 「現時点では予期しない」エラーが発生しないようにする方法

プロンプトでコマンドを入力するだけで、何か便利なことが起こるようになりますMore? :

C:\> (
More? date /t
More? )
Tue 04/11/2017

C:\> (
More? dir \Windows\win.ini
More? )
 Volume in drive C is OS
 Volume Serial Number is ▒▒▒▒-▒▒▒▒

 Directory of C:\Windows

08/13/2014  12:26 PM               435 win.ini
               1 File(s)            435 bytes
               0 Dir(s)  ▒▒▒,▒▒▒,▒▒▒,▒▒▒ bytes free

C:\>

複数のコマンドを別々の行に入力し、)最後の行の末尾まで移動することができます。

C:\> (
More? date /t
More? time /t
More? )
Tue 04/11/2017
06:18 PM

C:\> (
More? date /t
More? time /t)
Tue 04/11/2017
06:18 PM

C:\>

2.(と は)コマンドの意味にどのように影響しますか?

他の人が指摘しているように、次のようなコマンドがあります

C:\> for %f in (\Windows\*.dll) do @echo %f

ここで、(… は)コマンド自体の構文の一部です (FORこの場合は )。括弧を削除すると、構文エラーが発生します。私はそれについて話しているわけではありません。

述べたようにうんざりするほど、括弧グループコマンド。次のコマンドラインを検討してください。

echo cat & echo dog | findstr /n a

その意味は

  1. を行いecho cat、その後
  2. 「dog」という単語にはecho dog | findstr /n a
    文字「a」が含まれていないため、このコマンドは出力を生成しません。

したがって、上記の出力は次のようになります。

C:\> echo cat & echo dog | findstr /na

同様に、

C:\> echo cat & echo dog | findstr /no
1:

ここで追加の1:dog出力が得られます。なぜなら「dog」する「o」を含み、「dog」が最初の単語です(1コマンドへの入力の 1 行目findstr

さて、考えてみましょう

(echo cat & echo dog) | findstr /n a

(上記と同じですが、括弧が追加されています)つまり

  1. を行いecho cat
    その後
    を行いecho dog
  2. 上記の出力をパイプしてfindstr /n a

それで、

C:\> (echo cat と echo dog) | findstr /na
1:

C:\> (echo cat & echo dog) | findstr /no
2:

コマンドラインの左側(#1)からの出力は

cat
dog

そして「a」は行にあります1そのテキストの行に「o」が見つかります2はもはやcat 独立したコマンドではなくecho catグループパイプラインの左側を構成します。

コマンドのグループ化のより簡単な例を次に示します。

C:\Temp> echo cat & echo dog > animals
cat

C:\Temp> type animals
dog

C:\Temp> (echo cat & echo dog) > animals

C:\Temp> type animals
cat
dog

もちろん、上記や他の回答に示されているように、グループ内に改行を追加することもできます。

C:\> (
もっと?エコー猫
もっと?エコードッグ
もっと詳しく? ) | findstr /na
1:

3. 括弧は CMD の新しいインスタンスを作成しますか?

私はそうは思いません。明白で意味のある意味ではそうではありません。

C:\> (cd windows)

C:\Windows> set a=aardvark

C:\Windows> (set a=bat)

C:\Windows> echo %a%
bat

cd括弧内はメイン CMD プロセスの作業ディレクトリを変更し、set括弧内は括弧の外側に設定された変数値を上書きすることに注意してください。

答え3

( と ) は と に似ていますbegin blockend blockバッチ ファイル (.bat) に入力できるものはすべて、コマンド ラインに入力できます。

たとえば、次のようなステートメントのブロックを配置できるバッチ ファイルを作成できますif

if "%1"=="" (
  echo Multiple
  echo Lines when no parameter
)
echo END

(パラメータなしでバッチを実行すると、と の間にあるすべてのコマンドが実行されます)。最初のパラメータが指定されると、出力は 'END' のみになります。

さて、コマンド ラインに戻ります。コマンド ラインに直接入力して実際にこれを使用するコツやテクニックは知りません。ただし、同じルールに従います。コマンド ラインで次のように入力します。

(echo "1" & echo "2")

出力は次のようになります。

1
2

関連情報