30
42

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 5 years have passed since last update.

【Windowsバッチ】コマンド実行結果を環境変数に代入する方法

Posted at

ちょっとバッチを書いていてこれは知ってると便利!と思ったのでメモ。

LinuxのBashシェルなどでこのように書く処理

Bashの場合
# hoge.txtの行数を取得してLINECOUNTに代入するコマンド
LINECOUNT=`wc -l hoge.txt`
echo $LINECOUNT

実はWindowsバッチでも同じようなことができる。

Windowsバッチの場合
rem hoge.txtの行数を取得してLINECOUNTに代入するコマンド
for /f "usebackq" %%A in (`type hoge.txt ^| find /c /v ""`) do set LINECOUNT=%%A
echo %LINECOUNT%

め、面倒臭え……。
素直に「変数=`コマンド`」じゃいかんのかと思うけどこう書くらしい。
また「`コマンド`」内でパイプ「|」を使う場合はエスケープが必要で「^|」と書く。

ちょっと応用して、指定したフォルダ下にあるテキストファイルの名前、行数、サイズのリストを取得するバッチの例。

Windowsバッチの場合
rem 入出力設定
set DIR=%~dp0data
set OUTPUT=%dp0count.txt
if exist %OUTPUT% del %OUTPUT%

rem カウント出力処理
setlocal enabledelayedexpansion
for /f "usebackq" %%I in (`dir /b %DIR%`) do (

    rem ファイル行数を代入
    for /f "usebackq" %%J in (`type %DIR%\%%I ^| find /c /v ""`) do set LINECOUNT=%%J

    rem ファイルサイズを代入
    for %%K in (%DIR%\%%I) do set SIZE=%%~zK

    rem ファイル名、行数、サイズを出力
    echo %%I    !LINECOUNT!    !SIZE!>> %OUTPUT%
)

バッチのfor文内で環境変数を展開する場合は「setlocal enabledelayedexpansion」の指定が必要になる。
また環境変数の展開は「%変数%」ではなく「!変数!」となる。

30
42
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
30
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?