-1

以下にリストされている各要件は、ここのフォーラム内で個別に利用できる可能性が高いと思いますが、すべてをまとめるのに苦労しています(可能であれば!)。

誰かがこれを実現するために私を正しい方向に向ける忍耐と時間を持っていることを願っています。


私がする必要があるのは次のとおりです。

  1. ディレクトリ(およびすべてのサブディレクトリ)で特定のファイル名をスキャンします

    注:問題のファイル名を持つサブディレクトリ内には多くのファイルがありますが、サフィックスがJERRY であるサブディレクトリ内のファイルのみをターゲットにします。

    すなわち。以下の例では、矢印で示されたファイルがターゲットになります

    ONE\NEW1-JERRY\FILENAME.TXT   <----
    ONE\NEW1-TOM\FILENAME.TXT
    ONE\NEW1-SYLVESTER\FILENAME.TXT
    TWO\NEW2-JERRY\FILENAME.TXT    <----
    TWO\NEW2-TOM\FILENAME.TXT
    TWO\NEW2-SYLVESTER\FILENAME.TXT
    THREE\NEW3-JERRY\FILENAME.TXT    <----
    THREE\NEW3-TOM\FILENAME.TXT
    THREE\NEW3-SYLVESTER\FILENAME.TXT
    FOUR\NEW4-JERRY\FILENAME.TXT    <----
    FOUR\NEW4-TOM\FILENAME.TXT
    FOUR\NEW4-SYLVESTER\FILENAME.TXT
    
  2. ファイルがファイル名と一致し、上記のサブディレクトリ内にあることがわかったら、ファイルのコピーを取り(同じディレクトリに残すため)、次の基準に基づいて名前を変更します。

    a)作成された日時

    b)ファイル内の特定のコンテンツ

    ファイルの内容は常に行8にあり、最初の9文字です。

    元のファイル名: FILENAME.txt

    完成品: FILENAME- 20121129 @ 1300 -123456789.txt


前もって感謝します!

4

1 に答える 1

0

これまでに何を試したか、主電源の問題は何かを教えてください...これを試してください: (実際にファイルをコピーするには、-whatif フラグを削除してください)

#list dir & subdirs
ls c:\ -recurse |
    Foreach { 
        #find subdirs named JERRY
        if($_.PSIsContainer -and $_.name -match "JERRY"){
            ls $_.fullname -filter 'FILENAME*' |
            Foreach{ 
                $fcontent=get-Content $_.FullName
                $content=$fcontent[7].Substring(0,9)
                $newName=Get-Date -UFormat "%Y%m%d"
                $destination="$($_.Directory)\$newName@$content.txt"
                write-verbose $destination
                Copy-Item $_.FullName -Destination $destination -WhatIf 
            }  
        }
    }
于 2012-11-29T07:36:59.270 に答える