【问题标题】:In power shell, how to replicate the action I do in a folder to other folders?在 power shell 中,如何将我在文件夹中执行的操作复制到其他文件夹?
【发布时间】:2019-01-02 11:14:13
【问题描述】:

我应该做的事情:

  1. 从文件夹中读取文件
  2. 从第一行提取日期
  3. 改成'yyyymmdd'格式
  4. 通过删除前 4 个字符重命名所有文件并将此格式日期放在开头。

示例 FILE.FILE 将更改为 20180725.FILE(日期将在文件中)

我可以通过以下代码在 Newpath 中的单个文件夹中完成此操作:

$path="\\Data\DEV\DevDat\Arun\DXSL\Newpath\20170601"

$files=Get-ChildItem $path  | Select-Object -first 1

$data = Get-Content "$path\$files" -first 1
foreach($line in $data)
 {
 $arr = $line.substring(52,4)+$line.substring(46,2)+$line.substring(49,2)
}
get-childitem $path | rename-item -newname { $arr +[string]($_.name).substring(4)}

但是,我无法将此操作循环复制到其他文件夹。 Newpath 文件夹有几个子文件夹。我需要重命名 Newpath 内每个子文件夹中的文件。有什么方法可以实现吗?

仅供参考,我使用的是 powershell 版本 4。

【问题讨论】:

标签: powershell loops rename file-rename subdirectory


【解决方案1】:

我的评论中建议的 PowerShell 脚本。

  • 检查要重命名的文件是否已经存在。
  • Rename-Item 附加了参数-WhatIf,因此它只显示将要执行的操作。
  • 如果第一行有更多数字,脚本将匹配第一个模式。
  • 脚本还检查文件是否已重命名为模式。

## Q:\Test\2018\07\25\SO_51522205.ps1
#Requires -Version 3.0
$BasePath = "\\Data\DEV\DevDat\Arun\DXSL\Newpath"

$RE = [RegEx]'(?<Month>\d{2}).(?<Day>\d{2}).(?<Year>\d{4})'

ForEach ($Folder in (Get-ChildItem -Path "$BasePath\*" -Directory)){
    ForEach ($File in (Get-ChildItem -Path "$($Folder.FullName)\*" -File)){
        $Line1 = (Get-Content $File.FullName | Select-Object -First 1)
        If ($File.BaseName.Length -gt 4){
            $BaseName = $File.BaseName.SubString(4)
        } else {
            $BaseName = ''
        }
        If ($Line1 -match $RE){
            $NewName = ("{0}{1}{2}{3}{4}" -f `
                $Matches.Year,
                $Matches.Month,
                $Matches.Day,
                $BaseName,
                $File.Extension)
            $File | Rename-Item -NewName $NewName -WhatIf
        } Else {
            "{0} doesn't have a proper date in 1st line" -f $File.FullName
        }
    }
}

之前的样本树,

> tree /F
└───Newpath
    └───20170601
            blahblah.txt
            FILE.FILE

运行脚本后。

> tree /F
└───Newpath
    └───20170601
            20180724blah.txt
            20180725.FILE

【讨论】:

    猜你喜欢
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 2012-08-17
    相关资源
    最近更新 更多