0

폴더 및 하위 폴더의 파일을 반향시키고 파일 이름을 나타내는 출력을 생성하여 삭제하도록하는 방법을 알고 싶습니다. X 일 전. 단지 파일 이름을 에코 PowerShell 스크립트와 나에게 삭제 될 확인 된 파일의 출력을 제공 : PowerShell 스크립트를 사용하여 폴더 및 하위 폴더의 파일을 에코 한 다음 X 일이 지난 파일을 삭제합니다.

나는 두 개의 서로 다른 수준

레벨 1에서이 스크립트를 쓰고 싶었다. 여기에는 폴더 및 하위 폴더를 포함한 파일이 포함되어야합니다.

Level2 : 폴더 및 하위 폴더의 파일을 삭제하는 삭제 기능을 추가하여 level1 스크립트를 결합하십시오.

이동 스크립트와 직접 스크립트를 삭제해야하지만 올바른 파일이 선택되었는지 확인하고 삭제할 파일 이름을 알고 싶습니다.

도움이 매우 감사합니다.

편집 코멘트에서 추가

나는 매우 간단한 방식으로 이런 일을 시도하고있다

Get-ChildItem -Path c:\test | where {$_.lastWriteTime -lt (Get-Date).addDays(-60)} 

이 난에 파일 이름의 출력을 생성 할 몇 가지 매개 변수를 추가하고 싶습니다 다른 폴더 위치.

+2

질문에 내용을 추가하고 최소한 기본 작업을 수행했음을 보여주십시오. 이것은 사람들이 당신을 대신하여 스크립트를 작성하지만, 당신이 그들을 고치고 더 잘 이해할 수 있도록 도와 줄 장소는 아닙니다. –

+0

Christopher ... 나는 당신의 말에 전적으로 동의하고이 포럼을 존중합니다. 나는 포럼의 범위를 넘지 않을 것이다. 나는 아주 간단한 방법으로 이와 같은 것을 시도해왔다. Get-ChildItem -Path c : \ test | {$ _. lastWriteTime -lt (Get-Date) .addDays (-60)} 다른 폴더 위치에 파일 이름의 출력을 생성하는 매개 변수를 추가하고 싶습니다. 미리 감사드립니다 ..... – user1926332

+0

이것은 아직 명확하지 않습니다. 전직을 제공하고 싶습니까? 경로를 함수 매개 변수로? 출력은 어떻게 생겼을까요? "다른 폴더 위치의 파일 이름"이란 무엇입니까? 덧글이 아닌 질문에 샘플을 제공합니다. –

답변

1

이것은 여러분이 필요로하는 것을 따라 뭔가 있다고 생각합니다. 예를 들어, cmdletbinding과 같이 -whatif 매개 변수를 사용하여 스크립트를 마르게 실행할 수있는 몇 가지 개념을 소개했습니다. 또한 진행 상황을 확인하기 위해 -verbose를 제공 ​​할 수도 있고 Add-Content cmdlet을 사용하여이 시점에서 로그에 추가 할 수도 있습니다.

그래서 당신은 다음과 같이 실행할 수 있습니다

.\DeleteOldFiles.ps1 -Path c:\test -Age 50 -WhatIf -Verbose 

을 그런 다음 -WhatIf 매개 변수없이 당신이 그것을 실행할 수있는 파일을 삭제 할 준비가되었을 때 :

.\DeleteOldFiles.ps1 -Path c:\test -Age 50 -Verbose 

이 응답하지 않습니다 모든 질문은 있지만 시작할 때 도움이 될 것입니다. 코드에 많은 주석을 달아서 모두 따라갈 수 있어야합니다.

# Add CmdletBinding to support -Verbose and -WhatIf 
[CmdletBinding(SupportsShouldProcess=$True)] 
param 
(
    # Mandatory parameter including a test that the folder exists  
    [Parameter(Mandatory=$true)] 
    [ValidateScript({Test-Path $_ -PathType 'Container'})] 
    [string] 
    $Path, 

    # Optional parameter with a default of 60 
    [int] 
    $Age = 60 
) 

# Identify the items, and loop around each one 
Get-ChildItem -Path $Path | where {$_.lastWriteTime -lt (Get-Date).addDays(-$Age)} | ForEach-Object { 

    # display what is happening 
    Write-Verbose "Deleting $_ [$($_.lastWriteTime)]" 

    # delete the item (whatif will do a dry run) 
    $_ | Remove-Item 
} 
0

질문은 다소 모호합니다. 그러나 나는 이것이 당신이 원하는 것과 같다고 가정합니다.
David Martin의 답변이 마음에 들지만 기술 수준과 필요에 따라 조금 복잡 할 수 있습니다.

param(
    [string]$Path, 
    [switch]$LogDeletions 
) 

foreach($Item in $(Get-ChildItem -Path $Path | where {$_.lastWriteTime -lt (Get-Date).addDays(-60)})) 
{ 
    if($LogDeletions) 
    { 
     $Item | Out-File "C:\Deleted.Log" -Append 
    } 
    rm $Item 
} 
관련 문제