2017-04-21 16 views
0

フルパスのない抽出されたファイルのリストが表示されます。彼らは別々の行にあるtxtファイルに入っています。これらのファイルは、異なるフォルダまたはサブフォルダにあります。私はリストからファイルを削除し、30分以上経過している場合にのみリストからファイル名を削除したいと思います。例list.txtにPS - テキストファイルからファイル名のエントリを削除するには

file1.doc 
file2.doc 
file3.doc 

はのはfile3.docが30分未満の古いとしましょう。私の現在のコードでは、file1.docとfile2.docを削除し、file3.docには触れないようにすることができます。ファイルを削除すると、私のコードでlist.txtからfile1.docとfile2.docを削除したいと思います。

$Now = Get-Date 
$Minutes = "30" 
$TargetFolder = "C:\Test" 
$LastWrite = $Now.AddMinutes(-$Minutes) 

$Files = Get-Content C:\list.txt |% {get-childitem $TargetFolder -include $_ -recurse} | Where {$_.LastWriteTime -le "$LastWrite"} 

foreach ($File in $Files) 
    { 
    if ($File -ne $NULL) 
     { 
     Remove-Item $File.FullName -WhatIf | out-null 
     } 
    } 

私は初心者です。元のリストC:\ list.txtからファイル名を削除するにはどうすればよいですか?

ありがとうございます。

+5

ようこそStackOverflow。ここでは[質問]のガイドです。一般的に、質問には、あなたが試したことのある箇所や、どこに行き詰まっているのかに関するコードが含まれている必要があります。 PowerShellを使用する場合は、 'Get-ChildItem'、' Get-Content'、 'Remove-Item'、' Get-Date'コマンドレットを使用します。 'Get-Help xxx -Examples'でこれらを使用する方法の詳細を得ることができます。ここで' xxx'はあなたが助けたいコマンドです。 – BenH

+0

また、 'Get-Content'も); – t0mm13b

+0

問題文をよく理解できません。入力例、意図した出力、これまでに得たものを教えてください。 –

答えて

0

私は以下の方法でSet-Contentを使用しました。私が何か間違っていると思ったらコメントしてください。しかし、これは私の作品と同じくらいうまくいきます。

$Now = Get-Date 
$Minutes = "30" 
$TargetFolder = $args[0] 
$LastWrite = $Now.AddMinutes(-$Minutes) 
$List = "C:\list.txt" 

$Files = Get-Content $List |% {get-childitem $TargetFolder -include $_ -recurse} | Where {$_.CreationTime -le "$LastWrite"} 

foreach ($File in $Files) 
    { 
    if ($File -ne $NULL) 
     { 
     Add-Content -path C:\deleted.txt -value ((get-date).ToShortDateString() + ' - ' + (get-date).ToShortTimeString() + ' ' + $File.FullName) 
     Remove-Item $File.FullName | out-null 
     Set-Content -Path $List -Value (get-content -Path $List | Select-String -Pattern $File.Name -NotMatch) 
     } 
    } 
関連する問題