⌨️

コマンドプロンプト・バッチファイルでよく使うコマンド集

2020/09/27に公開約4,300字

コマンドプロンプトの簡単な起動方法

  • カレントディレクトリがユーザーフォルダになる
    • [win] + [R] -> cmd を入力 -> [Enter]
  • カレントディレクトリが今開いているフォルダになる
    • エクスプローラ上で [Shift] + 右クリック → 「コマンドウィンドウをここで開く」
    • エクスプローラのパスを入力する部分でcmdを入力 → [Enter]

テンプレート

※SJISで保存しないと日本語が文字化けする

@echo off

rem カレントディレクトリへ移動
cd &~dp0

rem 処理を書く

rem pause
exit /b 0

if文

set /P num="数値を入力して: "
if "%num%" == "" (
	echo numは未入力です
) else if %num% == 1 (
	echo numは1です

	rem if文のカッコ内でさらにカッコを使ってしまうと、この閉じカッコでif文が終了してしまうため使わないこと
	rem echo numは1です(%num%)
) else (
	echo %num%
)

入力によって分岐

:input_flg_start
set /P flg="進めますか?(y/n):"
if "%flg%"=="" (goto :input_flg_start)

rem y以外なら終了
if not "%flg%"=="y" (
	echo 終了
	pause
	exit /b 0
)

rem 無限ループするときは値を削除
set flg=

終了コードによって分岐する

1 <= errorlevel を判定する

if errorlevel 1 (
	echo xxに失敗しました
	pause
	exit
)

rem 以降は正常処理

0 == errorlevel を判定する

if %errorlevel% == 0 (
	rem 正常処理
)

今が何時か判定する

ifの大小比較を使う

比較演算子 意味 記号
equ 等しい ==
neq 等しくない !=
gtr より大きい >
geq 以上 =>
lss より小さい <
leq 以下 =<
echo %TIME%
echo %TIME:~0,2%

if 18 neq %TIME:~0,2% (
	rem 18時のときだけtrue
)

if 10 gtr %TIME:~0,2% (
	rem 0時~9時のときだけtrue
)

if 10 lss %TIME:~0,2% (
	rem 10時~23時のときだけtrue
)

ファイル操作

ファイルをコピーする

単なるcopyもあるが、これはディレクトリのコピーができないので書かない

xcopy /e/i <コピー元のパス> <コピー先のパス>

オプションの意味

  • /e: 空の場合も含めて指定ディレクトリ+その配下すべてのディレクトリ・ファイルをコピーする
    • エクスプローラーでコピペしたときと同じ(はず)
    • このオプションがないと、空ディレクトリをコピーしてくれない
      • 逆にいうと空ディレクトリをコピーしてほしくないときはオプションを外す
  • /i: コピー先が存在せず、コピーするファイルが複数の場合、コピー先をディレクトリと想定
    • コピー先をディレクトリとして生成してから、その中へコピーする

途中のディレクトリパスにワイルドカードは指定不可
(ファイルパスならOK)

rem testディレクトリ配下にあるtxtファイルをカレントディレクトリにすべてコピー
xcopy /e/i test\*.txt .

rem tで始まるディレクトリ配下にあるtest.txtファイルをカレントディレクトリにすべてコピーしたい
rem これは構文エラー
xcopy /e/i t*\test.txt .

ファイルのみ削除

ワイルドカード指定可能

del <削除するファイルパス>

rem 指定ファイルをすべてのサブディレクトリから削除
del /s <削除するファイルパス>

rem ワイルドカードでまとめて消すときに確認メッセージを出さない
del /q <削除するファイルパス>

ディレクトリを削除

delだとディレクトリは削除できない

rmdir /s /q <削除するディレクトリパス>

オプションの意味

  • /s: 指定ディレクトリ+その配下すべてのディレクトリ・ファイルを削除する
    • エクスプローラーで削除を選択したときと同じ
    • サブディレクトリがあるディレクトリに対して、このオプションが未指定のままrmdirを実行すると「ディレクトリが空ではありません。」と出力されて削除できない
  • /q: /sを指定したとき、確認メッセージを出さない

ファイルの存在を確認してからエクセルファイルを開く

フォルダ名でもOK

set FILE_PATH=<ファイルへのパス>

rem ファイルの存在確認
IF not EXIST %FILE_PATH% (
	echo %FILE_PATH%にファイルがありません
	pause
	exit
)

rem ファイルがあるなら開く
start %FILE_PATH%

日付から値を取得

バッチ実行日が 2020/05/10 のとき "20200510" を取得する

echo %date%
rem => 2020/05/10

echo %date:~0,4%
rem => 2020

echo %date:~5,2%
rem => 05

echo %date:~8,2%
rem => 2020

echo %date:~0,4%%date:~5,2%%date:~8,2%
rem => 20200510

エクスプローラーを開く

explorer <フォルダへのパス>

exeファイルの実行

rem exeを実行するとき終了まで待たない
start <exeへのパス>

rem 実行中のexeを強制終了
rem 名前はタスクマネージャーで分かる
taskkill /im <実行中のexe名>

シャットダウンする

rem 60秒後にシャットダウン
shutdown /t 60

rem 予約したシャットダウンを取り消し
shutdown /a

実行をn秒待つ

rem 5分待つ
timeout /t 300

rem Ctrl + C以外で進まない
timeout /t 300 /nobreak

クリップボードへ文字列を送信する

set str=aaaa

rem 改行つき
echo %str%|clip

rem 改行なし
set /p x=%str%<nul|clip

カレントディレクトリのパスを取得する

%~dp0とは異なり最後に \(円マーク)はつかない

C:\Users\username>echo %cd%
C:\Users\username

C:\Users\username>

指定したIPアドレスに接続できるか確認する

pingコマンドを使う

ping <IPアドレス>
ping <ホスト名>

-n オプションで問い合わせる回数を指定(デフォルトは4回)

ping -n 1 <IPアドレス>
if errorlevel 1 (
	echo <IPアドレスに接続できません>
)

-t オプションで無限に問い合わせる

メッセージボックスを表示する

vbsファイルを%TEMP%の直下に出力して実行する。
実行後「OK」ボタンが押されるまで待機する

echo msgbox "<表示内容>",vbInformation,"<ヘッダ部分>" > %TEMP%/msgboxtest.vbs & %TEMP%/msgboxtest.vbs

rem 出力したvbsを削除する
del %TEMP%\msgboxtest.vbs

参考

Discussion

ログインするとコメントできます