使用powershell脚本将新文件夹文件重命名为下一个增量编号

时间:2013-05-09 16:04:00

标签: powershell

我非常感谢你对此的帮助 我应该首先提一下,我一直无法找到任何特定的解决方案,而且我对使用PowerShell编程非常新,因此我的请求

我希望在powershell中编写(以及稍后安排)一个脚本,该脚本查找具有特定名称的文件--RFUNNEL,然后将其重命名为R0000001。任何时候文件夹中只会有一个这样的“RFUNELL”文件。但是,当下一个脚本运行并找到一个新的RFUNNEL文件时,我将把它重命名为R0000002,依此类推等等

我已经挣扎了几个星期了,我遇到的看似相似的解决方案并没有多大帮助 - 也许是因为我对powershell的经验有限。

2 个答案:

答案 0 :(得分:1)

其他人也许可以用较少的语法来做到这一点,但试试这个:

$rootpath = "C:\derp"

if (Test-Path "$rootpath\RFUNNEL.txt")
{ $maxfile = Get-ChildItem $rootpath | ?{$_.BaseName -like "R[0-9][0-9][0-9][0-9][0-9][0-9][0-9]"} | Sort BaseName -Descending | Select -First 1 -Expand BaseName;
  if (!$maxfile) { $maxfile = "R0000000" }
  [int32]$filenumberint     = $maxfile.substring(1); $filenumberint++
  [string]$filenumberstring = ($filenumberint).ToString("0000000"); 
  [string]$newName          = ("R" + $filenumberstring + ".txt");

  Rename-Item "$rootpath\RFUNNEL.txt" $newName;
}

答案 1 :(得分:0)

以下是使用正则表达式的替代方法:

[cmdletbinding()]
param()

$triggerFile   = "RFUNNEL.txt"
$searchPattern = "R*.txt"
$nextAvailable = 0

# If the trigger file exists
if (Test-Path -Path $triggerFile)
{
    # Get a list of files matching search pattern
    $files = Get-ChildItem "$searchPattern" -exclude "$triggerFile"

    if ($files)
    {
        # store the filenames in a simple array
        $files = $files | select -expandProperty Name 
        $files | Write-Verbose 

        # Get next available file by carrying out a 
        # regex replace to extract the numeric part of the file and get the maximum number
        $nextAvailable = ($files -replace '([a-z])(.*).txt', '$2' | measure-object -max).Maximum
    }

    # Add one to either the max or zero
    $nextAvailable++

    # Format the resulting string with leading zeros    
    $nextAvailableFileName = 'R{0:000000#}.txt' -f $nextAvailable
    Write-Verbose "Next Available File: $nextAvailableFileName"

    # rename the file
    Rename-Item -Path $triggerFile -NewName $nextAvailableFileName
}