ワイルドカードを使用してファイルを削除する


0

のような名前のファイルが何百もありますSageAccts Company Name 2018-06-21 00-00-10

時刻と日付はタイトルにあります。私は日を持っていないすべてのファイルを削除する2018-**-052018-**-15または2018-**-28

コーディングの経験はあまりないので、PowerShellまたはバッチファイルが最適です。


ファイル名の一部ではなく、ファイルの変更日時を操作できますか?その場合、forfilesを使用してこれを行うことができます。
LPChip

回答:


1

最初に正規表現でフィルタリングし、(キャプチャグループ)を使用してその日をgrepし、
特別な日を除外するのが最善です05|15|28

あなたは拡張子を指定しなかったので、私もそうしません。

## Q:\Test\2018\07\24\SU_1342824.ps1
#Requires -Version 3.0
Push-Location "X:\Folder\to\start"

$RE = [RegEx]'^SageAccts Company Name 2018-[01][0-9]-([0-3][0-9]) [0-2][0-9]-[0-5][0-9]-[0-5][0-9]$'
##                                    year-  month  -(  day     )    hour   - minute   -  second

Get-ChildItem 'SageAccts Company Name 2018-*' -File |
  Where-Object {$_.BaseName -match $RE} |
    Where-Object {$Matches[1] -notmatch '05|15|28' }|
      Remove-Item -Whatif

出力が正常に見える場合は-WhatIfRemove-Itemコマンドレットからパラメーターを削除します

## to generate test files
1..30|%{new-Item -ItemType file -path ("SageAccts Company Name 2018-06-{0:00} 00-00-10.txt" -f $_)}

0

PowerShellで探しているのは、で示される否定的な後読みを使用し?(<!)て目的の日を除外する正規表現の一致です。

Get-ChildItem "SageAccts Company Name *" | ?{ $_ -match '2018-(?:0\d|1[1,2])-(?:[0-2]\d|[3][0,1])(?<!05|15|28)' } | Remove-Item -WhatIf
  1. Get-ChildItemを使用したワイルドカードフィルターは、取得するファイル情報の制限を提供します。Get-ChildItemは、正規表現を直接サポートしていません。
  2. ?{}どこ-オブジェクトコマンドレットの省略形です。
  3. -match演算子で使用される提供された正規表現は、必要なファイルのリストを取得します。
  4. Remove-ItemのWhat-Ifスイッチは、何が起こるかを報告している間に削除が実行されないようにします。実際に実行する前に結果を確認できます。すべてが正常に見える場合は、-What-Ifを削除して再度実行してください。

    いつでもGet-Helpを使用して、コマンドレットの詳細を確認できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.