努力したWiki

推敲の足りないメモ書き多数

ユーザ用ツール

サイト用ツール


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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki