サイドバーの壁紙
博主头像
tin博主等级

子の曰わく、我れ三人行なえば必ず我が師を得(う)。其の善き者を択びてこれに従う。其の善からざる者にしてこれを改む。

  • 累積執筆 73 記事
  • 累計作成 32 タグ
  • 累計受入 2 コメント

目 次CONTENT

記事目次

WindowsのBAT入門

tin
tin
2024-07-03 / 0 コメント / 0 いいね! / 518 読み / 1,564 文字

1.BATファイルとは

BATファイル(バッチファイル)は、Windowsオペレーティングシステムで実行される一連のコマンドを含むテキストファイルです。拡張子は .bat または .cmd です。BATファイルをダブルクリックすると、その中に記述されたコマンドが順次実行されます。

2.基本的な構文

BATファイルは基本的にコマンドプロンプトで使うコマンドをそのまま記述する形式です。

3.簡単な例

3-1.Hello, World!

@echo off
echo Hello, World!
pause
  • @echo off:これにより、コマンド自体が表示されず、コマンドの実行結果のみが表示されます。
  • echo Hello, World!:画面に “Hello, World!” と表示します。
  • pause:ユーザーがキーを押すまで実行を一時停止します。

3-2.条件分岐

@echo off
set /p userinput="Enter your name: "
if "%userinput%"=="Alice" (
    echo Hello, Alice!
) else (
    echo Hello, stranger!
)
pause
  • set /p userinput="Enter your name:ユーザーからの入力を userinput 変数に格納します。
  • /p :オプションとして、ユーザー入力を受け取り、その入力を指定した変数に格納することを意味します。
  • if 構文:条件に基づいて異なる処理を行います。

3-3.ループ

@echo off
set count=1
:loop
echo %count%
set /a count=%count%+1
if %count% leq 10 goto loop
pause
  • :loop:ラベルを定義します。
  • goto loop:指定されたラベルにジャンプします。
  • set /a count=%count%+1:count 変数の値を1増やします。
  • 備考:set /a set の違いは、/a オプションを使用すると、算術演算が可能になることです。set /a を使うと、数値の計算が行われ、その結果が変数に代入されます。一方、set だけを使うと、計算ではなく文字列の連結が行われます。

4.応用例

4-1.指定された条件に一致するファイルやディレクトリに対して一連のコマンドを実行する

for %%f in (set) do (command)
  • %%f:ループ変数。この変数に各項目が順番に代入されます。バッチファイル内では %% を使用しますが、コマンドプロンプトで直接実行する場合は % を使用します。
  • (set):処理する項目のセット。例えば、(*) は現在のディレクトリ内のすべてのファイルを意味します。
  • (command):各項目に対して実行するコマンド。

4-2.ファイルサイズを表示する

@echo off
pushd %~dp0

for %%f in (*) do (
    echo %%f
    echo Size: %%~zf bytes
    )
)
pause

pushd %~dp0:バッチファイルが置かれているディレクトリ(スクリプトのディレクトリ)にカレントディレクトリを変更します。

  • %%~nf:変数 %%f のファイル名部分(拡張子を除く)を返します。
  • %%~xf:変数 %%f の拡張子部分を返します。
  • %%~zf:変数 %%f のファイルサイズ(バイト単位)を返します。

4-3.ファイルを処理する例(拡張子の変更)

次に、現在のディレクトリ内のすべての .txt ファイルを .bak ファイルにリネームする例を示します。

@echo off
for %%f in (*.txt) do (
    ren "%%f" "%%~nf.bak"
)
pause
  • ren:ren [旧ファイル名] [新ファイル名]
  • ren コマンドはワイルドカード(* や ?)をサポートしています。これにより、一度に複数のファイルを変更することができます。
  • 引用符(ダブルクォート)を使用してファイル名を囲むことにより、ファイル名にスペースが含まれている場合でも正しく処理できます。

5.遅延変数

5.1.遅延変数について

通常の変数と異なり、遅延変数は実行時に動的に評価されます。これにより、ループ内や条件分岐内で変数の値を動的に変更したり、参照することが可能になります。

@echo off
setlocal enabledelayedexpansion

:: ファイル名の設定
set file1=example1.txt
set file2=example2.txt
set new_suffix=_new.txt

:: ループ内で各ファイル名を処理
for %%i in (1 2) do (
    set filename=!file%%i!  
    set newfilename=!filename:~0,-4!!new_suffix!
    echo Original file name: !filename!
    echo New file name: !newfilename!
)

endlocal
pause
  • !file%%i! は file1 や file2 などの変数を動的に参照します。
  • !filename:~0,-4! は、filename の末尾4文字(ここでは .txt)を除いた部分を取得します。
  • !new_suffix! は、新しいサフィックス _new.txt です。

5-2.遅延変数と普通変数の違いについて

▼以下はBATファイルの内容
@echo off
setlocal enabledelayedexpansion

:: ファイル名のリスト
:: set file1=example1.txt
:: set file2=example2.txt
set extension=_new.txt

:: ループ内で変数を変更
for %%i in (example1.txt example2.txt) do (
    set file=%%i
    set newfilename1=%file:~0,-4%%extension%
    set newfilename2=!file:~0,-4!%extension%
    
    echo Original file name NORMAL: %file%
    echo New file name NORMAL: %newfilename1%
    echo.
    echo Original file name DELAY: !file!    
    echo New file name DELAY: !newfilename2!
    
    echo.
    echo.
)
endlocal
pause

▼以下はBATファイルの実行結果(遅延変数でないと、評価できないですね)
Original file name NORMAL:
New file name NORMAL:

Original file name DELAY: example1.txt
New file name DELAY: example1_new.txt


Original file name NORMAL:
New file name NORMAL:

Original file name DELAY: example2.txt
New file name DELAY: example2_new.txt
0
  • 0

コメント欄