移动项目计数器

时间:2013-01-21 15:18:42

标签: regex powershell logfile

我已将此修改为下面更简单的解释并删除了我以前的版本

下午好。

我想知道是否有人可以提供建议

我们每天都有带有当前日期的alogfile,例如22012013.txt,23012013.txt等

我的脚本中有一个移动项cmdlet,我想记录每天有多少文件被移动到3个特定文件夹,并将计数器写入上面提到的日期文本日志

假装这是我的文件夹结构

folder1中

文件夹2 folder3

作为一个例子,这是我的移动项目如何工作

我的移动项目将file1.txt移动到folder1

file2到folder3

file3到folder1

file4到folder3

file5到folder2

file6到folder1

在日志文件中,我想看到

项目已移至Folder1 = 3

项目已移至Folder2 = 1

项目已移至Folder3 = 2

就在第二天,那天文件移动将记录在当天的新日志文件中,如果可能的话,我希望每个移动项目的增量都增加

希望这是有道理的

此致

巴里

1 个答案:

答案 0 :(得分:0)

以下是移动文件然后更新日志的函数的示例实现 毫无疑问,它可能更简洁,但它完成了工作并且具有合理的可读性。

第一个参数是要移动的文件,第二个参数是目标文件夹的名称(它不能包含空格)。

基本上,在将文件移动到指定文件夹后,会抓取日志文件的最后一行并检查它是否包含今天的日期。如果是,则将行拆分为空格,并迭代生成的数组以查找文件夹名称。如果找到,则数组的下一项(将是对该文件夹所做的移动次数)加1。如果未找到,则文件夹名称将附加到该行。修改后的行然后替换文件中的最后一行。如果日志文件的最后一行不包含今天的日期,则会在该文件中附加一行,其中包含今天的日期和文件夹名称等。

@()用于确保包含的表达式返回一个数组 - 这样可以更容易地将内容作为正确的行添加到文件中。

 function Log-Move() {    
   $logfile = 'O:\AutoScan\log.txt'
   $destination = 'O:\AutoScan\'
   $folder = $args[1]    
   Move-Item -ErrorAction Stop $args[0] ( $destination + $folder )        
   $content = @( get-content -path $logfile )
   $line = $content[-1]
   $date = Get-Date -format 'd'    
   if ( $line ) {    
     if ( $line.Contains( $date ) ) {
       $items = $line.split()
       $count = $items.count         
       for ( $i = 0; $i -lt $count; $i++ ) {
         if ( $items[$i] -eq $folder ) {
           $items[$i + 1] = 1 + $items[$i + 1]
           break
         }
       }
       if ( $i -eq $count ) {
         $items += @( $folder, '1' )
       }
       $line = $items -join ' '
       if ( $content.length -gt 1 ) {
         $content = @( $content[0..$($content.length-2)] ) + $line
       } else {
         $content = @( $line )
       } 
     } else {
       $content += $date + ' ' + $folder + ' 1'
     }       
   } else {
     $content = @( $date + ' ' + $folder + ' 1' )
   }
   $content | Set-Content -path $logfile
 }

使用示例

Log-Move $newLongFilename Multiples
# log.txt:
# 22/01/2013 Multiples 1

Log-Move $anotherfile Multiples
Log-Move $anotherfile Autosorting
# 22/01/2013 Multiples 2 Autosorting 1