【问题标题】:Move-Item Counter移动物品计数器
【发布时间】:2013-01-21 15:18:41
【问题描述】:

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

下午好

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

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

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

假设这是我的文件夹结构

文件夹1

文件夹2 文件夹3

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

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

file2 到文件夹3

file3 到文件夹 1

file4 到文件夹3

file5 到文件夹2

file6 到文件夹1

在日志文件中,我想看看

项目已移至 Folder1 = 3

项目移动到 Folder2 = 1

项目移动到 Folder3 = 2

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

希望这是有道理的

问候

巴里

【问题讨论】:

    标签: regex powershell logfile


    【解决方案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
    

    【讨论】:

    • 嗨 MikeM 谢谢你的例子,但是我只看到这个,因为我已经更新了我的解释 是否可以将计数器附加到每个移动项目的日志文件中?每天都会创建日志文件,我只需要一个计数器来计算每个文件夹的每个移动项目
    • @Barrie Anderson。我已经展示了一个示例,说明如何按照您最初的要求,每天为移动到指定文件夹的文件增加日志文件中的计数。如果我的回答对你有用,请投票。任何其他或进一步的要求都需要比现在更清楚地指定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    相关资源
    最近更新 更多