以下のように、コマンドの一部として改行または改行を使用して、cmd.exe
でコマンドを実行しようとしています。
command -option:text
whatever
ただし、次の行にコマンドを続けるのではなく、新しい行ごとにコマンドを実行します。
では、改行文字を入力したり、cmd.exeに複数行のコマンドを作成したりするにはどうすればよいでしょうか。
エスケープとして^
文字を使用します。
command -option:text^
whatever
Windowsのcmd.exeを使用していることを前提としていますXPまたは類似しています。これは実際のDOSではありません。実際のDOS(MS-DOS、Win3.1、Win95、Win98を使用している場合) 、WinME)、改行のエスケープがあるとは思わない。カスタムシェルを実行する必要がある。cmd.exeは、行の最後で^
を入力してEnterキーを押すたびに、「More?」のプロンプトを表示する、Enterキーをもう一度押すと、実際にエスケープ/改行が埋め込まれます。
C:\>ver
Microsoft Windows [Version 6.3.9600]
C:\>echo Line1◙Line2 >con
Line1
Line2
C:\>
その改行文字は、テンキーを使用してCLIで Altコード として入力できます。NumLockがオンの場合、ALTを押したまま、ALTを離す前にテンキーで10と入力します。 CRも必要な場合は、Alt + 13とAlt + 10の両方で入力してください:♪◙
注:これはバッチファイルでは機能しません。
使用例:
%PATH%または%CLASSPATH%環境変数を読み取って、そこにあるものとその順序の概要をすばやく取得しようとしていますが、path
が返すテキストの壁は判読できません。次に、これはすばやく入力できるものです。
echo %path:;=◙% >con
編集:
元のメソッドが機能しなくなったcmd.exeの新しいバージョンに対してBrent Rittenhouseが発見した>con
回避策を追加しました。
^の出力は保存可能です
set br= ^
<</br (newline)>>
<</br>>
例:
@echo off
setlocal enableExtensions enableDelayedExpansion
rem cd /D "%~dp0"
rem //# need 2 [/br], can't be saved to a var. by using %..%;
set br= ^
set "t=t1!br!t2!br!t3"
for /f "tokens=* delims=" %%q in ("!t!") do (
echo %%q
)
:scIn
rem endlocal
pause
rem exit /b
;出力:
t1
t2
t3
Press any key to continue . . .
これがうまくいくかどうかはわかりませんが、&echoを付けてください(次のスペースが重要です)。新しい行で必要な各ステートメントの間。私は単純なバットファイルでこれを試しました
echo %1
次に、それをtestNewLines.batとして保存しました
したがって、cmd行
testNewLines first line&echo Second Line&echo Third line
次の結果がエコーバックされます
一行目
二行目
3行目
アミットの答えを拡張する( https://superuser.com/a/1132659/955256 )レガシーコンソールを使用せずに任意のフォントで実行する方法を見つけました。
行をalt-10文字でエコー出力し、con
にリダイレクトするだけで動作します。
たとえば、次の場合:
(エコー改行検出されたrigghhhtt◙^ <--- HERE!)> CON
編集:おもしろいことに、リダイレクトを最初に次のように置くことができるようです:
> CONエコー改行が検出されたrigghhhtt◙^ <---ここ!
変だよね?
次の出力が表示されます。
New-line detected rigghhhtt
<-- HERE!
(括弧はオプションです。)
ここ は、このANDキャリッジリターンで実行できるより堅牢な例であり、完全に独立して動作します!:
何よりも、これはファイルにリダイレクトする場合にも機能します!
(単に変更> CON
から> desired_output_file.txt
楽しい!
あなたはWindowsからそれを行うことができないと思いますcmd.exe
シェル。 (それはではありませんDOS。)
そのための完全な「カスタムシェル」は必要ありません。次のようなものを書くだけで済みます(例 Python ):
import subprocess
subprocess.call(["C:\\bin\\sometool.exe", "test\nwith\nnewlines"])
またはRuby:
Kernel::exec "C:\\bin\\sometool.exe", "test\nwith\nnewlines"
ほら、それほど難しいことではありません。