2016-06-28 14 views
1

文件夹结构,找到文件夹:按日期标准深藏在文件结构

\\server\DropFolder. 
├───PRD 
│ ├───CTASales 
│ │ └───v1.7 
│ │   setup.bat 
│ │ 
│ ├───CTASalesDeleteItems 
│ │ └───v1.1 
│ │   setup.bat 
│ │ 
│ └───Feature1 
│  └───v1.3.1 
│    setup.bat 
│ 
└───STG 
    ├───CTASales 
    │ ├───v1.7 
    │ │  setup.bat 
    │ │ 
    │ └───v1.8.1 
    │   setup.bat 
    │ 
    ├───CTASalesDeleteItems 
    │ └───v1.1 
    │   setup.bat 
    │ 
    └───Feature1 
     └───2.7 
       setup.bat 

如果版本文件夹vx.x.x在12小时内创建的,我要执行我的代码做一个自定义查找和对setup.bat文件替换。我是否需要foreach循环才能进入PRD/STG然后再查看每个CTA文件夹以查看版本创建时间?

到目前为止的代码:

Clear-Host 
$Radsdrop = '\\SERVER\DROPFOLDER' 
$date = Get-Date 
$hours = '-9999999' 

foreach ($env in (Get-ChildItem $RadsDrop -Directory)) 
{ 
    if($env.Name -eq 'STG') 
    {  
    Get-ChildItem $Radsdrop -Recurse -Filter 'setup.bat' | 
     Where-Object {$_.Parent.CreationTime -gt (Get-Date).AddHours($hours)} | 
     Get-Content -Filter 'setup.bat' | 
     ForEach-Object 
     { 
     $_ -replace 'dev', 'stg' ` 
     } | Set-Content c:\setup.bat 
    } 
} 

我不知道我需要怎么去bat文件的内容,并设置回相应的文件夹。

回答

2

可以使用Get-ChildItem cmdlet来获取所有setup.bat然后用Where-Object cmdlet来过滤所有的父目录年长12然后时间:

Get-ChildItem '\\server\DropFolder' -Recurse -Filter 'setup.bat' | 
    Where-Object {$_.Parent.CreationTime -le (Get-Date).AddHours(12)} | 
    ForEach-Object { 
     # do your find and replace with $_ 
    } 

编辑您的评论:

Get-ChildItem '\\server\DropFolder' -Recurse -Filter 'setup.bat' | 
    Where-Object {$_.Parent.CreationTime -le (Get-Date).AddHours(12)} | 
    ForEach-Object { 
     $content = Get-Content $_    
     if ($_.Parent.BaseName -eq 'STG') 
     {    
      $content = $content -replace 'dev', 'stg' 
     } 
     elseif ($_.Parent.BaseName -eq 'PRD') 
     { 
      $content = $content -replace 'prd', '' 
     }  
     $content | Set-Content $_ 
    } 
+0

不错,很好,很好:)。我一直想知道'$ _。Parent'是否给了你完整的(父)'FSO'? – sodawillow

+0

@sodawillow谢谢。 '_ _。父'是第一个父'System.IO.DirectoryInfo'。或者你用'FSO'表示什么? –

+1

“文件系统对象” - 你回答了我的问题:)。 – sodawillow