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


12

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

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

回答:


17

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

単一<の手段「にファイルを読んで標準入力に」cmd.exeが、2つの<文字のバックツーバックに意味がありcmd.exe、それはあなたが得たエラーを与えますので、。

<<オペレータはあるのすべての主要なタイプに有意義なUnixコマンドシェル、それがために使用され、ヒアドキュメント:²

$ 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は、その場合には、彼らは再びそれを破る、彼らはこれらのドキュメントをアーカイブしたときに、私が以前使っていたリンクを壊し、ここでバックアップサードパーティの参照です。

    cmd.exe私がmicrosoft.comで知っている他の唯一の参考資料は、WindowsコマンドPDF(4.9 MB、948ページ)です。cmdプロンプトで与えることができます。このPDFは2つの点で不完全です。まず、ここで最も関連性が高いのは、cmd.exeシェルでのリダイレクトの動作に関する複合的な説明ではありません。シェル文法の議論すらありません。第二に、PDFのコマンドリストが不完全です。最初にチェックしたことはカバーされていませんdiskpart

    これはすべて、Microsoft cmd.exePowerShellに置き換えようとする明確な試みによるものであり、PowerShellが長年続いていることを信じています。この記事を書いている時点での最新のWindows 10アップデートではcmd.exe、まだ存在していませんが、の存在を隠すためのさらなる措置を講じています。

    PowerShellは<<リダイレクト演算子もサポートしていないことに注意してください。また、Unixシェルの両方からの悲しい回帰では、リダイレクトをcmd.exeサポートしていませ<ん!

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

    ただし、POSIX.1-2008仕様の他の部分を注意深く読む<<と、区切り文字と単語の間にいくつかのスペースまたはタブ文字を入れることが合法であることが明らかになります。特に、参照トークン認識は7と10ルールの定義io_hereにおけるシェル文法、との定義を「空白」の文字クラス

    これがシェルのドキュメント化方法です。マイクロソフト、メモを取ります。;)

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


自分のほうがいいとは言えませんでした。ただし、Cygwinについては言及しませんでしたが、それは単にWindowsで行うことと、Unixで行うことだからです。多くの相互互換性がありますが、Cygwinや他のいくつかのWinベースのユーティリティのような仮想ワークアラウンドではなく、生のUnixを学ぶことを強くお勧めします。
BiTinerary

8
@BiTinerary:WindowsでUnixのようなことをできるようにするために膨大な数の人が毎日Cygwinを使用していることを考えると、そのヒントを答えに残しておくと思います。
ウォーレンヤング

うん、私はCygwinである真正性を落とすつもりはありません、私は時々それを日常的なタスクに使用しています。私は本物を起動する2セントを投入し、(特に初心者にとって)サードパーティの何かを学ぶよりも、まったく異なるOSに準拠する必要のあるオリジナルをスピンオフするよりも良いことを学んでいます。Cygwinのセットアップに必要な時間で、含まれているすべてのモジュールを指定し、それを使用し始めれば、実際に多くのことを学ぶことができたと言えます。Cygwinは、それを行った後に使用するもので、再起動したくないだけだと感じています
BiTinerary

Nit:(Unix)ヒアドキュメントはリダイレクトとパイプを認識しませんが、デフォルトではパラメーター/変数の置換とプロセスの置換を認識します(ドル記号とバックティックの両方の構文)。これらを使用しないようにするには、データ内でバックスラッシュを使用するか、コマンドラインで区切り文字の少なくとも1つの文字を引用します。
dave_thompson_085


4

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

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

< ファイルから読み取る

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

リストについてはこちらをご覧ください%^を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.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.