2

非常感谢您对此的帮助我首先要提到的是我无法找到任何具体的解决方案,而且我对使用 powershell 编程非常陌生,因此我的请求

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

我已经为此苦苦挣扎了几个星期,而我遇到的看似相似的解决方案并没有太大帮助——也许是因为我承认我在 powershell 方面的经验有限。

4

2 回答 2

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;
}
于 2013-05-09T16:44:01.717 回答
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
}
于 2013-05-10T13:56:53.623 回答