MW211 EXIT

devlog
Windowsコマンド/dirの結果を抽出
2015年07月23日
dirコマンドの結果をサンプルに、どうやれば抽出できるのか試行錯誤してみた

一行目を抽出する方法を試行錯誤した結果がこれ。
┌──────────────────────────────────────┐
│for /f "delims=" %a in ('dir') do (@echo %a> t.txt && exit /B)              │
├──────────────────────────────────────┤
│for /f "usebackq delims=" %a in (`dir`) do (@echo %a> t.txt && exit /B)     │
└──────────────────────────────────────┘

「"delims="」をつけないと、スペースで区切って終わってしまうので注意。

「exit /B」でもコマンドプロンプトから実行するとコマンドは閉じてしまう。
バッチファイルの場合は、「goto break」「:break」みたいな感じで
goto文も使えるのだが、一行コードでは厳しいようだ。

なお、バッチファイルに記述する場合には「%a」を「%%a」と変換する必要あり。


二行目を抽出する場合は、「skip=」で先頭の一行をスキップしてあげればよい
┌──────────────────────────────────────┐
│for /f "delims= skip=1" %a in ('dir') do (@echo %a> t.txt && exit /B)       │
├──────────────────────────────────────┤
│for /f "usebackq delims= skip=1" %a in (`dir`)                              │
│                                             do (@echo %a> t.txt && exit /B)│
└──────────────────────────────────────┘

末尾の一行を抽出するには、とにかくループを回してしまうのが手っ取り早いかも。
┌──────────────────────────────────────┐
│for /f "delims= skip=1" %a in ('dir') do (@echo %a> t.txt)                  │
├──────────────────────────────────────┤
│for /f "usebackq delims= skip=1" %a in (`dir`) do (@echo %a> t.txt)         │
└──────────────────────────────────────┘


行番号を出力して、それを元に抽出するという案もあるのだが
出力した行番号を削除する方法がわからない。
┌──────────────────────────────────────┐
│dir|findstr /n /r "." | findstr /r "^1:"                                    │
└──────────────────────────────────────┘
分類:Windows