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

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

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

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

解決済

2回答

22198閲覧

[powershell] ファイル数をカウントし、指定数以上なら、一番古いファイルを削除

mokumoku

総合スコア46

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

0クリップ

投稿2015/12/20 07:53

スクリプト開発初心者です。

フォルダ内のファイルの数をカウントして、指定した数(以下でしたら30)以上だったら、
一番古いファイルから順に削除するということをしたいのですが、
どういったコマンドを使用すればいいのかがわかりません。

何かアドバイス等ございましたら、回答お願い致します。

$a = (Get-ChildItem <パス> | ? { ! $_.PsIsContainer }).Count if($a -gt 30){ Write-Output '削除しました' #ここで削除の処理をしたい }

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

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

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

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

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

guest

回答2

0

ベストアンサー

いろいろな書き方がありますが、スクリプトを書く際は極力パイプラインで処理を組み立てて行く方式をお勧めします。

Get-ChildItem <対象フォルダのパス> | Sort-Object LastWriteTime -Descending | Select-Object -Skip 30 | foreach{Remove-Item $_.FullName}

解説するまでもありませんが、
1行目:対象フォルダ配下のファイルリストを取得する
2行目:最終更新時刻の降順にソートする
3行目:最初の30ファイルをスキップする
4行目:対象があれば絶対パスに変換し Remove-Item で削除する

投稿2015/12/20 09:20

pi-chan

総合スコア5936

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

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

catsforepaw

2015/12/20 09:29

> Select-Object -Skip 30 配列をいじるよりこっちの方が直感的ですね。
mokumoku

2015/12/20 09:44

解決致しました! >いろいろな書き方がありますが、スクリプトを書く際は極力パイプラインで処理を組み立てて行く方式をお勧めします。 今後、参考に致します。 回答ありがとうございました。
guest

0

こんな感じでしょうか。

powershell

1$files = Get-ChildItem パス指定 | Sort-Object -Descending -Property LastWriteTime 2$files = $files[30 .. $files.length] 3foreach($file in $files) 4{ 5 Remove-Item $file 6}

投稿2015/12/20 09:09

catsforepaw

総合スコア5938

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問