Search This Blog

Command Prompt

batchを作成するときに調べたこと、使うものを中心に纏めてみようと思う。
これまでは何となくで使ってきた Windows だけれども、自分に合う快適な操作環境を意識しながら整えていこう。自分に合った快適を探す経過の記録。
file's timestamp(秒表示)
行数を出力する
0 byte file(空ファイル)
テキストをファイルへと出力する
遅延展開
set
6
7
8
9




setlocal enabledelayedexpansion 遅延展開

Batファイルで遅延展開を有効にするためのもの。
One-linerでは enabledelayedexpansion は解釈されることはない。つまり書いても無意味。
遅延展開が必要なら、cmd /v:on で起動し直してから実行する。
以下、遅延展開も含めたOne-liner。私の力作。無駄に無理やり/c を"括らず"、括れば^が少なくなり、もう少し楽に作れます。サンプルはこのBLOG内探せばあります。
cmd /v:on /c for /f "tokens=1,* delims=:" %a in ('for /d %i in ^^(*^^) do @echo 0:%~fi ^^^& dir "%i" /a /s ^^^| findstr /e "バイト" ^^^| sort /r ^^^| findstr /n ".*" ') do @(if %a==0 set p=%b) ^^^& if %a==1 echo %b,!p!
call を利用することでもできるとの情報あり。callでできる時とできないときの区別ができていないので保留




prompt

C:\?>set prom
PROMPT=$P$G
C:\?>prompt $P[$t]$G
C:\?[ 1:18:20.12]>

>nul

pause >nul
If - DOS コマンド一覧 - Programming Field
のsampleにある。pauseにより出力されるmessageを表示しないためのものと思われる。

^

C:\>echo a ^
More? bcdef
a bcdef

C:\>

set

set /a calc=3*6 >nul
上をプロンプトで実行すると、18が標準出力される。これもnulに渡すことで表示させないようにもできる。
One-linerに含まれるときの標準出力抑制として使える。
Batでは標準出力されないらしい。
Set - DOS コマンド一覧 - Programming Field

set /a calc1=3*6,calc2=2*7 
,で連続記述できる模様。そうしているサンプルを見てできた。 set /p には、改行しないことを利用しての副次的な利用法、上下している2行を1行に連結させる、という使い方 ができるらしい。本来は入力を受けるためのもの。


ファイルの更新時間を秒まで表示できる。

forfiles /C "cmd /c echo @file @fsize @ftime"

Tech TIPS:Windowsのforfilesコマンドで条件に合うファイルを取り出して処理する - @IT


空ファイルを作成する

探すといくつか見つかるけれど、自然で理解しやすい方法は
type nul> file.txt
少ない入力でエラーMSGを気にしないならば
con> file.txt
でもいい。たまたま間違えたが、空ファイルは作成されていた。


行数を出力する

他に方法があるかもしれないけれど
findstr /n $ <file> | find /c ":"


テキストをファイルへと出力する

copy con out.txt
A
B
C
D
(CtrlZ)



Reference:
DOS コマンド一覧 - Programming Field >> これがなければここまで作れはしなかっただろう、BAT作るなら必読のサイト。 Ref.
炎のコマンドプロンプト入門/コマンド辞典/ファイル操作コマンド