0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

バッチの基本メモ

Last updated at Posted at 2022-06-18

書いたコマンドを実行時に非表示

基本的に一番上に書く

@echo off

実行後にコマンドプロンプトを閉じない

一番下に書く

1. 何か押すまで閉じないようにする
pause

2. 閉じないようにする
cmd /k

コメントアウト

以下のどちらかの方法で説明(コメントアウトメッセージ)を記載

rem コメントアウトメッセージ
:: コメントアウトメッセージ

echoで出来ること

echo 表示するメッセージ

:: メッセージを新規としてファイルに出力
echo メッセージ > ファイル名.txt

:: メッセージをファイルに追記出力
echo メッセージ >> ファイル名.txt

日時

日付
::**********日付**************
::一つずつ変数に格納する
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set yyyymmdd=%year%%month%%day%

::まとめた版
set yyyymmdd=%date:~0,4%%date:~5,2%%date:~8,2%
時間
::**********時間**************
::一つずつ変数に格納する
set time2=%time: =0%
set hour=%time2:~0,2%
set minute=%time2:~3,2%
set second=%time2:~6,2%
set hhmmss=%hour%%minute%%second%

::まとめた版
set time2=%time: =0%
set hhmmss=%time2:~0,2%%time2:~3,2%%time2:~6,2%

copy

ファイルのコピー
copy [ファイル名(パス)] [コピー後ファイル名(パス)]

:: 例 拡張子一括返還
copy *.txt *.log
フォルダのコピー
xcopy /i /e [フォルダ名(パス)] [コピー後フォルダ名(パス)]

:: /i = コピー先のフォルダ名が無かったら作成する
:: /e = フォルダの中身が空でもコピーする

::バックアップ例
xcopy .\バックアップ元フォルダ .\バックアップ先フォルダ /d /e /c /y /r

rename

rename [ファイル名] [ファイル名変更後のファイル名]

配列

:: 定義
変数名[0]=配列1つ目の文字列
変数名[1]=配列2つ目の文字列
・・・

例としてファイルを行ごとに配列に格納する場合を以下に示す

:: 遅延環境変数設定
setlocal enabledelayedexpansion

:: 配列個数用の変数
set list_num=0

:: ファイルを読み込んで1行毎に配列に格納する
for /f "delims=" %%a in (ファイル名.txt) do (
  set array[!list_num!]=%%a
  set /a list_num=list_num+1
)

::配列の確認
echo %array[0]%
echo %array[1]%

:: 遅延環境変数設定の終了
endlocal

for文

for文内の処理で、変数の中身変更などが生じる場合は、「遅延環境変数の展開」の設定もすること

::1. 特定の回数繰り返す****************************************
for /l %%[アルファベット1文字] in ([開始する数],[増加させる数],[終了する数]) do (
  処理内容
)
::***例***
set cmax=20
for /l %%a in (1,1,%cmax%) do (
)

::2. すべての特定拡張子のファイルについて実行する****************
for %%[アルファベット1文字] in (*.拡張子) do (
)
::***例***
for %%a in (*.txt) do (
)

::3. すべてのフォルダについて実行する**************************
for /d %%[アルファベット1文字] in (*) do (
)
:: /d=フォルダについて繰り返すオプション
::***例***
for /d %%a in (*) do (
)

::4. ファイル中身の読み込み***********************************
for /f "delims=" %%[アルファベット1文字] in (ファイル名) do (
)
:: /f=オプションはファイルの内容に対してループ処理を行うオプション
:: ”delims=” = 区切り文字の指定をしていない。つまり、一行の中にスペースがあった場合でも、1行として認識される
::***例***
for /f "delims=" %%a in (./sample.txt) do (
    echo %%a
)

if文

if 条件1 (
) else if 条件2 (
) else (
)

::条件例
%hoge%==1
exist 存在を確かめたいファイル名

数字の計算

set /a 変数1=計算式
::/a = 数式として認識する

値を入力

set /p 変数=表示名
:: /p = ユーザが入力できるようにする

他バッチファイルの呼び出し

::1. 呼び出したバッチファイルの終了を待たずに次のコマンド
start バッチファイル名

::2. 呼び出したバッチの処理が完了するまで次のコマンドには進まない
call バッチファイル名

置換

::1. 文字を置換****************************************************
%[置換対象文字列]:[置き換えられる文字列]=[置き換え後の文字列]%
::***例***
set string=%string:work=job%



::2. ファイル内の文字置換*******************************************
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%[アルファベット1文字] in (ファイル名1) do (
  set 1行分文字列=%%[アルファベット1文字]
  set 1行分文字列=![1行分文字列]:[置き換えられる文字列]=[置き換えた後の文字列]!
  echo !1行分文字列! >> ファイル名2
)
endlocal

::***例***
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in (file.txt) do (
  set line=%%a
  set line=!line:work=job!
  set line=!line:dog=cat!
  echo !line! >> file_change.txt
)
endlocal

2つのファイルを比較

fc /n ファイル1 ファイル2 > 差分出力ファイル名

スキップ

goto [飛ぶ先]
    ***飛ばす処理***
:[飛ぶ先]

:: ファイルの終了
:eof

ファイル解凍

zipファイルやgzファイルを解凍するコマンド

C:\Windows\System32\tar.exe -xzf <解凍対象ファイルパス> -C <解凍先フォルダパス>

:: ※tar.exeと同じ階層に移動後に実施する場合は以下コマンドでも可能
cd C:\Windows\System32\
tar -xzf <解凍対象ファイルパス> -C <解凍先フォルダパス>

:: ***** 例 *****
:: 解凍対象ファイルパス:C:\Users\usr\デスクトップ\sample.tar.gz
:: 解凍先フォルダパス:.\(バッチファイルと同じフォルダ)
C:\Windows\System32\tar.exe -xzf C:\Users\usr\デスクトップ\sample.tar.gz -C .\

PC シャットダウン

::PCシャットダウン
shutdown.exe /s /f /t 0

::PC再起動
shutdown.exe /r /f /t 0

オプションの説明

待機タイマー:/t 秒数(0にすることで即時実行)
警告せずに実行中のアプリケーション強制終了:/f

参考サイト

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?