質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

1回答

5162閲覧

バッチ_forfilesコマンド_処理件数をだしたい

poporian_a

総合スコア8

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2021/09/08 08:08

編集2021/09/08 09:44

前提・実現したいこと

お世話になります。

過去のログファイルを削除するバッチファイルを作成しています。
その際、forfilesというコマンドを使用しています。

やりたいこととしては、検索条件にヒットして削除された件数を表示させたいです。

ですが、良い方法が検索でひっかからず、お手上げ状態です。
イメージとしては、forfiles内で処理件数をカウントしていき、表示させるような...?
どうか何かいい方法がございましたら、ご教授いただきたいです。

ベースは下記のような形です。

@echo off rem 対象ディレクトリ set backupdir=C:\test\LOG rem 実行結果出力先 set output=C:\test\result.txt rem 日数指定(下記は60日以上前のデータを消す) set days=-60 rem ログファイル削除 for %%A in (log txt) do forfiles /P "%backupdir%" /M *.%%A /S /D %days% /C "cmd /c del /F /S /Q @file" >>%output% echo ERRORLEVEL=%errorlevel%

試したこと

① forfiles | find /c /v "" を使用
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13191467808

↓ 適用

for %%A in (log txt) do forfiles /P "%backupdir%" /M *.%%A /S /D %days% /C "cmd /c del /F /S /Q @file" | find /c /v "">>%output%


エラー:無効な引数またはオプションです

②ループ内でカウント

set /a cnt=0 for %%A in (log txt) do forfiles /P "%backupdir%" /M *.%%A /S /D %days% /C "cmd /c del /F /S /Q @file" >>%output% & set /a cnt+=1 echo 処理件数:%cnt%

%%A in (log txt) で指定している拡張子ぶん(つまり2)しかカウントしてくれない(現状、いつまでも処理件数は2と表示)
forfilesに指定した条件で削除されたぶん、カウントしていって欲しい

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

① forfiles | find /c /v "" を使用

エラー:無効な引数またはオプションです

が全角になっています。半角にしましょう。

それはそれとして、"cmd /c @path del /F /S /Q @file"はエラーになると思いますが。

投稿2021/09/08 09:03

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poporian_a

2021/09/08 09:55 編集

@otn >|が全角になっています。半角にしましょう。 コメントありがとうございます。 半角にしたら、数値を表示するようになりました。 が、件数は想定だと3なのですが 2 3 といった形で表示されます。 調べたところ、おそらくファイル内の行数を表示していそうです。 ファイル数を取得するにはどういった工夫が必要でしょうか? >それはそれとして、"cmd /c @path del /F /S /Q @file"はエラーになると思いますが。 はい。コピペミスです。修正しておきます。
otn

2021/09/08 10:24

> コピペミスです。修正しておきます。 修正後が、"cmd /c del /F /S /Q @file" ですが、これだとサブディレクトリ以下のファイルは消えませんが。
otn

2021/09/08 10:26

> 件数は想定だと3なのですが その想定の理由は? logファイルと、txtファイルはそれぞれ何個ですか?
poporian_a

2021/09/09 03:09

>修正後が、"cmd /c del /F /S /Q @file" ですが、これだとサブディレクトリ以下のファイルは消えませんが。 サブは見ずにとりあえずファイルが消せればいい段階でやっています。 追々は"cmd /c IF @isdir==TRUE rmdir /S /Q @file"など使うやもしれません。 >logファイルと、txtファイルはそれぞれ何個ですか? logファイルが1個,txtファイルが2個です。
otn

2021/09/09 04:18

> logファイルが1個,txtファイルが2個です。 だと、 1 2 と書かれるのが想定ですね。find は forfiles 1回ごとに実行されるので、拡張子ごとのカウントになります。 調べると最初に空行が入るようなので、1ずつ大きくなってしまいますね。 find /c /v "" じゃなくて find /c " " で空白を含む行をカウントすれば良いかと。 1 2 じゃなくて合計の、 3 が欲しいのなら、 ( for %%A in (log txt) do forfiles /P "%backupdir%" /M *.%%A /S /D %days% /C "cmd /c del /F /S /Q @file" ) | find /c " " でfor %%A 全体を括弧で囲みます。これだとfindは1回だけ実行します。
poporian_a

2021/09/13 00:45

お返事遅くなり大変申し訳ございませんでした。 素晴らしい。 理想通りの結果を得られました!!! 感謝です。本当にありがとうございました...!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問