2025-03-31
忘れないうちにメモ
バッチファイル内からPowerShellのコマンドレット Get-ChildItem を使って、ユーザ metan のダウンロードフォルダ内のファイル数を確認する。
@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での類似のシェルスクリプト例はこんな感じ。
バッククォートでコマンドの実行結果を取り込める。
#!/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文なのでその行数分繰り返し実行される事になる。