documents:windows:batch:batch-012
外部コマンドの出力を環境変数に格納するメモ
2025-03-31
忘れないうちにメモ
バッチファイル実行
バッチファイル内からPowerShellのコマンドレット Get-ChildItem を使って、ユーザ metan のダウンロードフォルダ内のファイル数を確認する。
- sample.bat
@echo off SET FILECOUNT=0 FOR /F "usebackq" %%a in ( `powershell "(Get-ChildItem D:\users\metan\downloads\ -File).Count" ` ) DO SET FILECOUNT=%%a ECHO FILECOUNT=%FILECOUNT%
実行結果。
C:\Users\metan>sample.bat FILECOUNT=1182
説明
Unixでの類似のシェルスクリプト例はこんな感じ。
バッククォートでコマンドの実行結果を取り込める。
- sample.sh
#!/bin/sh c=`find ./ -type f | wc -l` echo filecount=$c
バッチでは何故かFOR文で実施する事になる。
FOR /F "usebackq" %%a in (`外部コマンド`) DO ( 代入処理 )
オプション “usebackq” でバッククォートが使えるようになり、その中でコマンドを実行する事になる。※なお、パイプ記号 “|” はそのまま使えず、“^|” に置換える必要あり。
外部コマンドは、以下のコマンドレットを実行し、
Get-ChildItem D:\users\metan\downloads\ -File
返ってきたオブジェクトの Count プロパティを読み出している。
また、外部コマンドの出力が複数行ある場合はFOR文なのでその行数分繰り返し実行される事になる。
documents/windows/batch/batch-012.txt · 最終更新: 2025/03/31 06:02 by k896951