1

これを以下のより簡単な説明に修正し、以前のバージョンを削除しました

こんにちは

誰かにアドバイスしてもらえないかと思った

毎日、22012013.txt、23012013.txt など、現在の日付を含むログファイルがあります。

スクリプトにアイテムの移動コマンドレットがあります。毎日、3 つの特定のフォルダーに移動されたファイルの数を記録し、上記の日付付きテキスト ログにカウンターを書き込みたいと考えています。

これが私のフォルダ構造であるふりをします

フォルダ1

フォルダ2 フォルダ3

例として、これが私の move-item がどのように機能するかです

私の移動アイテムはfile1.txtをfolder1に移動します

file2 から folder3

file3 から folder1

file4 から folder3

file5 から folder2

file6 から folder1

ログファイルで、私は見たいです

Folder1 に移動したアイテム = 3

Folder2 に移動したアイテム = 1

Folder3 に移動したアイテム = 2

そして、それは翌日です。その日のファイル移動は、その日の新しいログ ファイルに記録されます。可能であれば、移動項目ごとに増分を増やしたいと思います。

これが理にかなっていることを願っています

よろしく

バリー

4

1 に答える 1

0

ファイルを移動してからログを更新する関数の実装例を次に示します。
間違いなくもっと簡潔になる可能性がありますが、仕事は完了し、適度に読みやすくなっています。

最初の引数は移動するファイル、2 番目の引数は移動先フォルダーの名前です (空白を含めることはできません)。

基本的には、ファイルを指定したフォルダに移動した後、ログ ファイルの最後の行を取得して、今日の日付が含まれているかどうかを確認します。含まれている場合は、行が空白で分割され、結果の配列が反復処理されてフォルダー名が検出されます。見つかった場合、配列の次の項目 (そのフォルダーへの移動回数) が 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
于 2013-01-22T12:04:24.103 に答える