我非常感谢你对此的帮助 我应该首先提一下,我一直无法找到任何特定的解决方案,而且我对使用PowerShell编程非常新,因此我的请求
我希望在powershell中编写(以及稍后安排)一个脚本,该脚本查找具有特定名称的文件--RFUNNEL,然后将其重命名为R0000001。任何时候文件夹中只会有一个这样的“RFUNELL”文件。但是,当下一个脚本运行并找到一个新的RFUNNEL文件时,我将把它重命名为R0000002,依此类推等等
我已经挣扎了几个星期了,我遇到的看似相似的解决方案并没有多大帮助 - 也许是因为我对powershell的经验有限。
答案 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
}