バッチファイルで<&4と4<%1は何をしているの?
MS-DOSバッチファイルで、
コマンド1 > ファイル名 2>&1
というような書き方をして、
標準出力だけでなくエラー出力もファイルに書き出すことが
できることは理解しています。
そして、数値は0,1,2の3つがあり、各々、
ハンドルSTDIN(キーボード入力)
ハンドルSTDOUT(コマンドプロンプトウィンドウへの出力)
ハンドルSTDERR(コマンドプロンプトウィンドウへのエラーの出力)
であることも理解しています。
しかし、
この数値が3以上で使用されているコードを見かけました。
例えば、
ネット上に以下のコードがあったのですが、
SET /P s1= >NUL <&4
の「>NUL」の部分は、
メッセージが画面に表示されないようにしていると思いますが、
「&4」の部分と
最後の行の4<%1の「4」の部分は何をしているのでしょうか。
実際に動かしてみると、
%1(file1.txt)ファイルの各行が、1行ずつ、
4という名前の変数(ハンドル?)に順番に入っていき、
&4の部分でそれを取り出して、
環境変数s1に代入(セット)しているように見えます。
私は、バッチファイルで、
このような(3以上の数値を使った)使用法を
いままでに見たことがありませんでした。
このような使い方を詳しく解説しているサイト
がありましたら教えてください。
よろしくお願いします。(Windows10)
---Paste.CMD---------------------------------
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
(FOR /F %%0 IN ('FIND /C /V ""') DO SET a1=%%0) <%1
(FOR /F %%0 IN ('FIND /C /V ""') DO SET a2=%%0) <%2
IF %a1% LSS %a2% SET /A a1=a2
(FOR /L %%k IN (1,1,%a1%) DO (
SET s1=
SET s2=
SET /P s1= >NUL <&4
SET /P s2= >NUL <&5
ECHO:!s1! !s2!
)
) 4<%1 5<%2
------------------------------------
使用例
paste file1.txt file2.txt
------------------------------------
お礼
お礼が遅れてしまい大変申し訳ございませんでした。 この詳細な解説すごくわかりやすく納得できました。 このコマンドというのがバックアップを行う前に走らせているものでした。 多分バックアップ前の実行ファイルが正常に終了しないと バックアップを開始しないためその対処だったと思います。 本当にありがとうございました。