Powershell脚本根据特定条件重命名TXT文件

时间:2012-11-29 05:48:05

标签: datetime powershell recursion rename

我意识到下面列出的每个要求可能都在论坛中单独提供,但我很难将它们全部整合在一起(如果可能的话!)。

希望有人有耐心和时间指出我正确的方向来实现这一目标。


我需要做的是:

  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. 当找到与文件名匹配的文件并且在上面列出的子目录中时,取一份文件(保留在同一目录中)&amp;根据以下标准重命名:

    a)创建日期/时间

    b)文件中的某些内容

    文件中的内容始终位于ROW 8上,它是前9个字符

    原始文件名: FILENAME.txt

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


  3. 提前致谢!

1 个答案:

答案 0 :(得分: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 
            }  
        }
    }