web-dev-qa-db-ja.com

バッチファイルまたはコマンドプロンプトで「<<」を使用する方法

私は>>の用途を知っています。すべてのメッセージを画面ではなくファイルに書き込みます。そして、私は<<を逆にすると思います、私はそれを試してメッセージを受け取ります:<< was unexpected at this time.

<<の用途と使用方法を教えてください。

14
DMaster

標準のWindowsコマンドシェル— _cmd.exe_ — _<<_演算子を使用しません まったく 。¹

単一の_<_は、「ファイルを読み込む 標準入力 "を_cmd.exe_に変換することを意味しますが、2つの_<_文字を連続して使用しても、_cmd.exe_には意味がありません。 、それはあなたが得たエラーを与えます。

_<<_演算子 is は、主要なすべてのタイプの nixコマンドシェル で意味があり、 here-documents に使用されます=:²

_$ some-command <<END
blah blah blah
blah blah
blah blah blah blah blah
END
_

これらの3行は、標準入力で_some-command_に送信されます。

これは、_<_演算子を使用する必要があるため、最初にファイルに書き込むことなく、大量のテキストをコマンドに送信する場合に役立ちます。私は頻繁にそれをスクリプトに「使用法」メッセージを埋め込むために使用します:

_#!/bin/sh
if [ -z "$1" ]
then
    cat <<USAGE
usage: myscript <files...>

     Grobbles the foobie for all files given on the command line.

USAGE

    exit 1
fi

# ... do something with command line arguments
_

ヒアドキュメントのテキストは画面に出力されるのとまったく同じようにフォーマットされているため、echoステートメントをたくさん書くよりも優れています。さらに、このコンテキストでは、空白、引用符、リダイレクト、変数補間を処理する方が簡単です。たとえば、シェルがI/Oリダイレクトに使用しようとするのを防ぐために巧妙な処理を行う必要なく、使用方法のメッセージで山かっこを使用したことに注意してください。

Windowsでこのようなことをしたい場合は、 Cygwin をインストールして、そのシェルの1つを使用できます。 Windows 10を使用している場合は、代わりに [〜#〜] wsl [〜#〜] を使用できます。


脚注:

  1. そのリンクは、アーカイブされたWindowsに移動しますXPドキュメントツリー。Microsoftがこれらのドキュメントをアーカイブしたときに以前使用していたリンクを解除したため、再度リンクが壊れた場合に備えて here バックアップサードパーティのリファレンスです。

    Microsoft.comで知っている唯一の_cmd.exe_参照資料は WindowsコマンドPDF (4.9 MB、948ページ)であり、ほとんどの参照(! )cmdプロンプトで指定できる組み込みおよびMicrosoft提供の外部コマンドこれはPDFは2つのベースで不完全です。最初に、ここで最も重要なのは、_cmd.exe_シェルでリダイレクトがどのように機能するかについての組み合わせの議論はありません。シェルの文法次に、PDFのコマンドリストは不完全です。たまたま最初に確認したことはカバーされていません: diskpart

    これはすべて、Microsoftが_cmd.exe_を PowerShell で置き換えようという明確な試みから来ていると信じています。この記事の執筆時点での最新のWindows 10の更新プログラムには _cmd.exe_ の存在を隠すための追加の手順が含まれていますが、まだ完全に削除されていません。

    PowerShellは_<<_リダイレクト演算子もサポートしていません 。また、UNIXシェルと_cmd.exe_の両方からの悲しい回帰では、_<_リダイレクトをサポートしていますか?

  2. Here-documentを開始する標準的な方法は、上で書いたとおりで、_<<_と区切り文字Wordの間にスペースはありません。私のあいまいな思い出は、私がシェルスクリプトで見たヒアドキュメントのすべての使用もこの方法で行われていることです。 here-documentsのPOSIX仕様 の例でもこのスタイルを使用しています。

    ただし、 POSIX.1-2008仕様 の他の部分を注意深く読むと、_<<_と区切り文字Wordの間にいくつかのスペースまたはタブ文字を置くことが合法であることがわかります。特に、 トークン認識ルール7および1シェルグラマー の_io_here_の定義、および the "blank"の定義を参照してください。文字クラス

    That はシェルをドキュメント化する方法です。マイクロソフト、メモを取ってください。 ;)

    ここでBash 4と_ksh93_をテストすると、これが期待どおりに機能することが確認されます。

17
Warren Young

有る >および>> だけ <、ありません<<

command < filename        Type a text file and pass the text to command

ソース: http://ss64.com/nt/syntax-redirection.html

7
Shevek

>新しいファイルに書き込みます。

>>ファイルに追加します

<ファイルから読み取ります

|コマンド出力を別のコマンドの入力に送信します

リストについては、こちらをご覧ください %^をcmd.exeにWindowsイースターエッグに入力していますか?

それが投稿されたので、これは追加されました。

Starting a Program
===============

See start /? and call /? for help on all three ways.

Specify a program name
--------------------------------

    c:\windows\notepad.exe

In a batch file the batch will wait for the program to exit. When
typed the command Prompt does not wait for graphical
programs to exit.

If the program is a batch file control is transferred and the rest of the calling batch file is not executed.

Use Start command
--------------------------

    start "" c:\windows\notepad.exe

Start starts a program and does not wait. Console programs start in a new window. Using the /b switch forces console programs into the same window, which negates the main purpose of Start.

Start uses the Windows graphical Shell - same as typing in WinKey + R (Run dialog). Try 

    start Shell:cache

Use Call command
-------------------------

Call is used to start batch files and wait for them to exit and continue the current batch file.
4
trigger