⌨️
コマンドプロンプト・バッチファイルでよく使うコマンド集
コマンドプロンプトの簡単な起動方法
- カレントディレクトリがユーザーフォルダになる
- [win] + [R] ->
cmd
を入力 -> [Enter]
- [win] + [R] ->
- カレントディレクトリが今開いているフォルダになる
- エクスプローラ上で [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
クリップボードへ文字列を送信する
rem 改行つきになる
set str=aaaa
echo %str%|clip
rem 改行なし
set /p str="aaaa"<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
参考
- Windowsのバッチファイル中で日付をファイル名に使用する (1/2) - @IT <https://www.atmarkit.co.jp/ait/articles/0405/01/news002.html >
- WINDOWSバッチのechoを改行させず出力させたい - マイクロソフト コミュニティ <https://answers.microsoft.com/ja-jp/windows/forum/all/windowsバッチのecho/f6031f1d-5b41-421a-a362-68b57bca75f0 >
- errorlevel(終了コードを取得する) <https://jj-blues.com/cms/command-errorlevel/ >
- カレントディレクトリのパスを取得する | まくまくWindowsノート <https://maku77.github.io/windows/cmd/get-current-dir.html >
- バッチ(bat)で任意の文字入力待ち→入力→確認→完了 を作成 <https://web-creators-hub.com/windows/bat-set-s/ >
Discussion