1

お世話になっております。

特定の文字を含むファイル数をカウントする

を眺めていて、「コマンドで取得できないかな?」と調べていたら、「DIR」と「FIND」を組み合わせる方法を見つけました。

コマンドプロンプト/指定した文字列を検索する・find

ファイル数をカウントする - コマンドプロンプトの予感

これを参考に、検索対象フォルダ「C:\WinActor\test」の中にある、ファイル名に「対象A」を含むファイル数を抽出するコマンドを記述しました。

cd "C:\WinActor\test" & dir /a-d /b "*対象A*" | find /c /v ""

これを、ライブラリ版とノード版それぞれで実行して結果を取得してみたのですが、ノード版でうまく結果が取得できませんでした。

コマンド記述については勉強中のため、私の書き方に難があるのだろうと思うのですが、自分では原因になかなかたどり着けず。

もしよろしければ、お知恵を貸していただけると幸いです。

以下、試してみた結果を記載します。

<用意した環境>

フォルダ「C:\WinActor\test」に複数のファイルを用意。

(WinActor v6.3.0/Windows10)

-----------------------------------------------------------

1.ライブラリ【コマンド実行結果をファイル保存】で試した結果:【成功】

<プロパティ>

コマンド:値⇒cd "C:\WinActor\test" & dir /a-d /b "*対象A*" | find /c /v ""

保存ファイル名:値⇒C:\WinActor\実行結果.txt

 ⇒ 実行結果.txtに「6」という結果が出力された。

2.ライブラリ【コマンド実行】を結果を受け取れるよう修正したうえで試した結果:【成功】

<修正部分>

・・・
' 実行コマンドの終了待ち
Do While objExec.Status = 0
      WScript.Sleep 300
Loop
result = objExec.StdOut.ReadLine
SetUMSVariable $実行結果$, result
' CurrentDirectoryを元に戻す
・・・

<プロパティ>

コマンド:値⇒cmd.exe /c cd "C:\WinActor\test" & dir /a-d /b "*対象A*" | find /c /v ""

実行結果:結果取得変数

※待機ボックスの「メッセージ」欄に「【%結果取得変数%】」と記載

 ⇒ 待機ボックスで「【6】」と表示された。

3.ノード「コマンド実行」で試した結果:【取得できず】

コマンド:値⇒cmd

オプション:値⇒/c cd "C:\WinActor\test" & dir /a-d /b "*対象A*" | find /c /v ""

起動終了まで待つ(出力を受け取る)」にチェックを入れ、変数名に「結果取得変数」を指定

※待機ボックスの「メッセージ」欄に「【%結果取得変数%】」と記載

 ⇒ 待機ボックスで「【】」と表示された。

※1:

「dir "C:\WinActor\test" | find "対象A" /c」でも「対象A」を含むファイル数は取得できますが、FINDではワイルドカードが使用できないため、今回は除外しました。

(「*対象A*」だと「検索対象A」ファイルも「対象A」ファイルも対象となるが、「対象A*」とすれば「対象A」ファイルのみが絞り込める、など応用が効くため)

※2:

「dir /a-d /b "C:\WinActor\test\*対象A*" | find /c /v ""」でも同様の結果が取得可能ですが、やはりノード版の「コマンド実行」では結果を取得できていません。

また、上記に記述のやり方(cd & dir | find)は、単純にォルダパスと検索条件が分かれていたほうがシナリオ上は扱いやすいかな、と思って分離しただけなので、上記記述でなければならないということはないと思います。

この質問は解決済みのためクローズされています。
Yuzunoki ベストアンサーとして選択しました
回答とコメントは、会員登録(無料)で閲覧できるようになります。