it-mure.jp.net

日付を変更して、特定のレベルでサブフォルダーを一覧表示します

ここであなたたちのための挑戦:

サブフォルダーのリストを生成するためのいくつかの方法(できれば組み込みですが、F/OSSサードパーティアプリも検討される場合があります)が必要です特定のレベルでと一緒に(またはより良い) 、フィルタリング)「変更日」。フォルダのリストが必要であることに注意してくださいのみ-出力はファイルを除外する必要があります。

例:

フォルダ構造の場合:

C:
\---Reports
    +----Task1
    |    \----Report1
    |         +----CSV
    |         +----HTML
    |         \----XML
    +----Task2
    |    +----Report1
    |    |    +----CSV
    |    |    +----HTML
    |    |    \----XML
    |    +----Report2
    |    |    +----CSV
    |    |    +----HTML
    |    |    \----XML
    |    \----Report3
    |         +----CSV
    |         +----HTML
    |         \----XML
    \----Task3
         +----Report1
         |    +----CSV
         |    +----HTML
         |    \----XML
         \----Report2
              +----CSV
              +----HTML
              \----XML

リストに次のような情報を含めたいのですが。

PATH                         | MODIFIED
=============================|==========
C:\Reports\Task1\Report1     | 6/23/2011
C:\Reports\Task2\Report1     | 6/17/2011
C:\Reports\Task2\Report2     | 6/30/2011
C:\Reports\Task2\Report3     | 7/06/2011
C:\Reports\Task3\Report1     | 6/22/2011
C:\Reports\Task3\Report2     | 7/13/2011

(「Report#」フォルダーのレベルより上または下のフォルダーは除外されることに注意してください。)

または、理想的には、次のようなレポートを生成できるものが必要です。

PATH                         | MODIFIED
=============================|==========
C:\Reports\Task1\Report1     | 6/23/2011
C:\Reports\Task2\Report1     | 6/17/2011
C:\Reports\Task2\Report2     | 6/30/2011
C:\Reports\Task3\Report1     | 6/22/2011
=============================|==========
TOTAL                        |         4

(これは、特定の日付範囲に制限された、前のリストのフィルター処理されたバージョンを表すことに注意してください。)

これは、Windows XP/2003で実行される予定です。 PowerShellが利用可能です。繰り返しになりますが、利用可能な組み込みユーティリティを使用したいのですが、F/OSSツールも検討される可能性があります。

6
Iszi

パワーシェル:

_gci C:\Reports\*\* | where {$_.LastWriteTime -gt ((get-date)- (new-timespan -day 7))} | select FullName,LastWriteTime | ft
_

少し分解します:

gci(別名_get-childitem_)は、そのように聞こえ、提供されたファイルシステムパスをオブジェクトとして扱い、そこから子アイテム(ファイルまたはフォルダー)をプルします。

これは、引数として単一のフィルター関数を持つwhereステートメントにパイプされます。

フィルタ関数は「単純な」比較です。この場合、{A -gt B} = "AがBよりも大きい場合はTrue"です。この最初の部分は_$_.LastWriteTime_で、パイプから渡された各オブジェクトを取得し、LastWriteTimeプロパティを引き出します。これの最後の部分は、相対的な日付構成です。 PSでは非常に単純なものはありません。日付の最初の部分は現在の日付を取得し、その数値から時間を減算します(この例では、7日の値を含む新しい日付オブジェクトを作成しているため、マイナス7日で日付が得られます。 7日前)。

whereフィルタリングを通過したオブジェクトから、FullNameプロパティとLastWriteTimeプロパティだけを取り出しています。これが、私たちが気にするすべてだからです。

最後に、それは_format-table_(別名ft)コマンドにパイプされるので、次のようなきれいなテーブルを作成します。

_FullName                           LastWriteTime
--------                           -------------
C:\Reports\Task1\Report1           7/11/2011 10:00:00 AM
C:\Reports\Task2\Report1           7/10/2011 5:00:00 AM
C:\Reports\Task2\Report2           7/6/2011 9:00:00 PM
C:\Reports\Task4\Report7           7/4/2011 3:00:00 PM
_

すべてのカウントを取得するには、上記のコマンドを次のように囲みます。_(mess_from_above_less_the_ft_part).count_( "| ft"の部分を削除する必要があります。そうしないと、4行のテーブル形式が追加され、カウントされてカウントが破棄されます。 4.4。

9
Chris S