仕事で使えるかも知れないWindows コマンド＆ワンライナー集 + バッチファイル

![RE2EbDL.jpg](https://qiita-image-store.s3.amazonaws.com/0/258841/bf5ca423-e680-3be1-e748-3dfd1d0cc6ea.jpeg)

コマンドプロンプトはとりあえず 「winキー + R」って打ってcmdで開こう

## 背景

PowerShellとかWSLとか一切無いような環境で作業する機会が発生しました。
コマンドプロンプトはcdとdirぐらいしか使ったこと無いから嫌だとか言ってる場合でも無いので
とりあえず備忘録的にまとめました。

特に目新しいものでもなくホントの初心者の初心者用の記事です。
ワンライナーとか便利コマンドあれば是非コメントください。

## 基本コマンド

|コマンド|内容                                                   |使いそうなオプション|
---------|-------------------------------------------------|--------------------
|dir     |現在のフォルダ内にある、ファイル、フォルダの一覧を示す |
|cd      |フォルダの移動。cdの後にパスを指定します               |
|tree    |ディレクトリをツリー形式で表示                         |/F 配下のファイルも全て表示
|xcopy   |ファイルをディレクトリ構造ごとコピーする               |/H 隠しファイルも全てコピー /Y 上書き確認無し
|copy    |ファイルをコピーする                                   |
|del     |ファイルの削除                                         |/P 確認メッセージ入れる
|md      |ディレクトリの作成                                     |
|rm      |ディレクトリの削除                                     |
|ren     |ファイルやディレクトリのリネーム                       |
|cls     |画面のクリア                                           |
|type    |ファイルの内容を表示                                   |
|more    |ページャ。なぜかlessは無い。。。                       |/e 拡張機能有効
|fc      |2ファイルを比較                                        |
|find    |ファイル内の文字列を検索                               |/V 検索結果を含まない行だけ /C検索文字列の行数
|findstr |ファイル内の文字列を正規表現を使って検索               |
|exit    |コマンドプロンプトを終了する                           |

## ネットワーク系

|コマンド|内容                                                   |使いそうなオプション|
---------|-------------------------------------------------------|--------------------|
ipconfig |TCP/IPネットワーク設定を確認                           |/all 詳細な設定を全て表示
|ping    |目的のIPアドレスまでパケットが正常に到達するか確認     |-L パケットサイズ指定 -N 送信回数指定
|tracert |データの転送ルートを確認                               |
|netstat |ネットワーク統計情報の表示                             |
|route   |IPルーティング・テーブルの表示                         |
|pathping|ネットワーク転送の追跡                                 |
|nslookup|DNSネーム・サーバー情報の表示                          |
|arp     |ARPキャッシュの表示および変更                          |
|ftp     |FTPサーバーとの通信                                    |
|rcp     |ファイルのリモート・コピー                             |
|rsh     |コマンドのリモート実行                                 |
|schtasks|スケジュールされているタスクを表示                     |

## システム系

|コマンド   |内容                                                   |使いそうなオプション|
------------|-------------------------------------------------------|--------------------|
|systeminfo |システム構成やOS・ネットワークなどの設定情報を確認     |/fo csv csv形式で表示する
|shutdown   |シャットダウンだったり再起動を行う                     |-r 再起動 -a シャットダウン中止
|eventcreate|カスタムイベントを作成する                             ||
|ver        |Windowsのバージョン表示                                ||
|chkdsk     |ディスクの状態をチェックし、エラーを修復               ||

## その他

#### コマンドのman的なのを見る

基本的にコマンド + /? でコマンドの使い方が見れる

``` bash
$ dir /?
ディレクトリ中のファイルとサブディレクトリを一覧表示します。

DIR [ドライブ:][パス][ファイル名] [/A[[:]属性]] [/B] [/C] [/D] [/L] [/N]
  [/O[[:]ソート順]] [/P] [/Q] [/R] [/S] [/T[[:]タイムフィールド]] [/W] [/X] [/4]


  [ドライブ:][パス][ファイル名]
              一覧表示するドライブ、ディレクトリ、またはファイルを指定します。

  /A          指定された属性のファイルを表示します。
  属性        D  ディレクトリ                R  読み取り専用
              H  隠しファイル                A  アーカイブ
              S  システム ファイル           I  非インデックス対象ファイル
               L  再解析ポイント             -  その属性以外
  /B          ファイル名のみを表示します (見出しや要約が付きません)。
  /C          ファイル サイズを桁区切り表示します。これは
              既定の設定です。/-C とすると桁区切り表示されません。
  /D          /W と同じですが、ファイルを列で並べ替えた一覧を表示します。
  /L          小文字で表示します。
  /N          ファイル名を右端に表示する一覧形式を使用します。
  /O          ファイルを並べ替えて表示します。
  ソート順    N  名前順 (アルファベット)     S  サイズ順 (小さい方から)
              E  拡張子順 (アルファベット)   D  日時順 (古い方から)
              G  グループ (ディレクトリから) -  降順
続行するには何かキーを押してください . . . 

```

## 使ってみた

#### 今開いているディレクトリをエクスプローラーで表示

コマンドプロンプトで操作しながらアプリの起動とかをマウスで行ったり

``` bash
$ start .
```

#### 拡張子を一括変換

txtをdatへ一括で変換しています。
一括削除も同じ感じで使える。

``` bash
$ rename *.txt *.dat

$ del *.bak
```

#### ファイアフォールを無効化する

``` bash
$ netsh advfirewall set allprofiles state off

$ Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
```

#### ネットワークのドライブ割り当て

``` bash
$ net use ドライブレター: \フォルダパス パスワード /user:ユーザアカウント
```

#### プロセスの利用ポート一覧を表示する

-bを追記すればプロセス名も取得できる

``` bash
$ netstat -ano
```

#### プロセスIDからプロセス名を特定する

指定したPIDに対応するアプリケーション名が得られる

``` bash
$ tasklist /FI "PID eq 2780"
```

#### 特定のポートを使用しているプロセスを表示

``` bash
$ netstat -oan | findstr ":80"
```

#### 連番のIPアドレスのマシンに対してping

``` bash
$ for %i in (1,2,3) do ping 192.168.0.%i
```

#### 複数ファイルをまとめて出力する

``` bash
$ type *.txt
```

#### カレントディレクトリにある特定のファイルを一括で開く

``` bash
$ for %V in ( *.txt ) do %V
```

#### ファイル内容の単語をキーにしてファイルの行を検索

``` bash
$ findstr /n /s "hoge foo" *.txt
```

#### ファイルをツリー形式で表示

``` bash
$ tree /f
```

#### 出力結果をクリップボードへコピー

「コマンド + | clip」で出力結果がコピーされる
これは結構便利かも

``` bash
$ dir | clip
```

#### 一つ前のディレクトリへ戻る

linuxでいう「cd -」的なやつ。記憶できるのはちょっと便利

``` bash
# 戻ってきたいディレクトリを記憶
$ pushd .

# 戻る
popd
```

#### 環境変数を参照/編集

環境変数の設定どこだよって何度もなるので

``` bash
# 参照(全部)
$ set

# 参照(特定のもの)
$ echo %path:;= / %

# 編集(末尾へ追記)
$ set PATH=%PATH%;C:\HogeHoge

# 編集(先頭へ追記)
$ set PATH=C:\HogeHoge;%PATH%
```

## バッチファイル

#### いろんなディレクトリから特定のファイルの収集

ファイル名に「test_」と付いているファイルだけを集める

```
@echo off
 
dir /b /s test_*.txt > list.txt
 
for /f %%a in (list.txt) do (
  copy "%%a" ./test_dir/
)
```

#### 日付取得

ログ用とかに日付や時間が欲しいとき

``` bash
@echo off

set YYYYMMDD=%DATE:/=%
dir > result.txt.%YYYYMMDD%
```

## 小技

#### エクスプローラからコマンドプロンプトに移動する

エクスプローラーで任意のディレクトリを開いた状態で「shift + 右クリック」で［コマンドウィンドウをここで開く］を選択
コマンドプロンプトのカレントディレクトリが上のディレクトリで開かれる

#### ドライブの切り替え

CドライブからDドライブへ移動

d:[ENTER]

## 文字列操作

Vを変数としたときに表示フォーマットの指定
文字列操作は意外と直感的に使える。
 
``` bash
%V% 
変数Vの値全体|%V% ⇒「ABCDEFGHIJKL」

%V:~m%
m文字目から、最後まで|%V:~5% ⇒「FGHIJKL」

%V:~m,n%
m文字目から、n文字分|%V:~5,2% ⇒「FG」

%V:~m,-n%
m文字目から、最後のn文字分を除いたもの|%V:~5,-2% ⇒「FGHIJ」

%V:~-m%
後ろからm文字目から、最後まで|%V:~-5% ⇒「HIJKL」

%V:~-m,n%
後ろからm文字目から、n文字分|%V:~-5,2% ⇒「HI」

%V:~-m,-n%
後ろからm文字目から、最後のn文字分を除いたもの|%V:~-5,-2% ⇒「HIJ」
```

## 所感

3日程作業したが全く慣れなかった。
とりあえずいろいろまとめたが多分しばらく慣れないと思う。

## 参考URL

[Windowsコマンド集](https://tech.nikkeibp.co.jp/it/free/NT/WinKeyWord/20040805/1/)
[IT屋必見！　『コマンドプロンプト』のストレスが少し減る小技集](https://www.yutorism.jp/entry/2015/07/09/125950)
[『コマンドプロンプト』で使えるコマンド一覧](http://kowaza.withinit.com/wincommand/cmd_command.html)