1

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

下午好

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

每天我们都有记录当前日期的日志文件,例如 22012013.txt、23012013.txt 等

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

假装这是我的文件夹结构

文件夹1

文件夹 2 文件夹 3

例如,这是我的移动项目的工作方式

我的移动项目将 file1.txt 移动到文件夹 1

文件 2 到文件夹 3

文件 3 到文件夹 1

文件 4 到文件夹 3

文件 5 到文件夹 2

文件 6 到文件夹 1

在日志文件中,我想看看

移动到文件夹 1 = 3 的项目

移动到文件夹 2 的项目 = 1

移动到文件夹 3 = 2 的项目

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

希望这是有道理的

问候

巴里

4

1 回答 1

0

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

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

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

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

 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
于 2013-01-22T12:04:24.103 回答