質問: (希望)以下の2行目と3行目を、1行にできますか?短くなりますか? ``` chcp 65001 echo %date% %TIME:~0,8% コメント >> txt.txt echo %date% %TIME:~0,8% コメント | clip ``` よろしくお願いします。
回答: コメントにUpvoteが付いていて、要望にフィットしているらしいので回答として書き出します。 `2行目と3行目を、1行にできますか?短くなりますか?`についてはXY問題で、課題の肝心な部分は、元のやり方では時刻情報の取得が別々に2回行われるので違う時刻が記録される可能性があり、それを回避したいということですね。 以下のような候補が考えられます。 * 環境変数を使う * PowerShellコマンドを使う * フリーソフトを使う その前に、`3任意のコメントを入力したい。`件については、以下の記事が応用できるでしょう。 【Windows】バッチファイルのコマンドライン引数 すべての引数を一括で取得する `%*`を使えば空白が含まれていても1つの文字列として使えます。 **環境変数** 日時情報の取得を1回だけにして、それを作業用の環境変数に格納し、テキストファイルへの追記やクリップボードへの出力は別途行います。 1行にまとめる必要は無く、むしろ行数は増えます。 特に気にする必要は無いのですが、それでも環境変数が増えることを気にするならば、`setlocal`を指定してバッチファイル内だけで使うようにします。 以下のように出来るでしょう。 ``` setlocal chcp 65001 set logstr=%date%%TIME:~0,8% ランチ開始時刻 %* echo %logstr% >> txt.txt echo %logstr% | clip ``` **PowerShellコマンド** 質問で使われている`clip.exe`はクリップボードへ書き込むだけのもので、読み出す方法は有りませんが、それがPowerShellコマンドで出来ます。 Windows10でクリップボードの内容をコマンドで受け渡しする > > 逆にクリップボードの内容(テキストデータ)を取得する場合は、PowerShellの「Get-Clipboard」コマンドレットを利用します。 > > > こんな記事も クリップボード操作 先にクリップボードへ書き込んで、その次にPowerShellコマンドでクリップボードからテキストファイルへ追記します。 ``` chcp 65001 echo %date% %TIME:~0,8% ランチ開始時刻 %* | clip powershell -command "get-clipboard" >>txt.txt ``` こちらも1行にまとめる必要は無いのですが、それでもまとめたいなら`&`で続けて実行します。 複数のコマンドを続けて実行する ``` chcp 65001 echo %date% %TIME:~0,8% ランチ開始時刻 %* | clip & powershell -command "get-clipboard" >>txt.txt ``` ただし、上記だと両方とも改行が1つ余分に追加されて空行が出来るようなので、もう少し工夫が必要でしょう。 いっそ全部PowerShellのスクリプトにするのも有りかもしれません。 **フリーソフト** パイプの途中に入れて使えるフリーソフトsafeteeというのがあります。 > > 標準出力と標準エラー出力を画面とファイルに出力する tee > > > 以下のように出来ます。 ``` chcp 65001 echo %date% %TIME:~0,8% ランチ開始時刻 %* | safetee -a txt.txt | clip ``` ソース付きなので、追加したい機能があれば、自分で改造することも出来ます。 **その他** > > 2androidでやってみたい。 > > 412時間円グラフ表示したい。 > > > これらは別の手段が必要で、やり方を聞きたいならば別の質問を起こしてください。 ちなみにandroidには標準のスクリプト実行環境は無いと思われますし、そうした環境をインストール・セットアップするのは手間がかかるでしょうから、何か専用のアプリケーションを作った方が良さそうです。