cmd.exeでワンライナー


初めに

WindowsもPowerShellが非常に使い勝手がよくなりLinuxやMacのようにコマンドラインでも様々なことができるようになりました。しかし今度は、従来使っていたbatファイルのコマンドを忘れてしまうことがあります。。そこでサンプル集の覚書きを書いておきます。

サンプルコード

ディレクトリにあるファイルの一覧を出力する

dir /b /o:e >list.txt

>はテキストで出力するための記号。

日付を6桁でリネームする

ren hoge.csv %date:~2,2%%date:~5,2%%date:~8,2%_result.csv

日付を環境変数から取得して加工するのがポイント。

CSVファイルをどんどん下に結合していく

copy /b %~dp0\*.csv %~dp0\result.csv

%~dp0はカレントディレクトリを示す。絶対に覚えなければいけないスニペット。

CSVから指定の列だけ取り出す

for /f "tokens=1,3 delims=," %%i in (hoge.csv) do echo %%i,%%j >> result.csv

CSVのサイズに制限がありますが、上の例だと1列目と3列目を取り出す。

テキストファイルの名簿を元にフォルダを生成する

pushed %~dp0
for /f %%i in (namelist.txt) do mkdir %%i
exit

これはバッチファイルで実行してください。pushedの使い方が重要です。

その他に覚えておくといいこと

ワンライナーではないですが、バッチファイルを書くときに覚えておくといいことがあります。

  • @echo offをバッチファイルの冒頭に書くことで無駄な出力を止めることができる。
  • 文の初めにremをつけるとその文はコメント行扱い。

ユーザ入力を変数に格納する

set /P NAME="テキスト文"

NAMEという変数に入れることにユーザの入力した内容を格納することができます。変数を使うときには%NAME%のように%で囲む必要があります。