PowerShell中有一个任务,它检查文件名,如果文件名末尾有添加号,并且如果在第一次检查后存在,我们将数字加一。
我很难将数字增加1。
$path = 'D:\Test\TestFile.zip'
if (Test-Path $path) {
# File exists, append number
$fileSeed = 0
do {
$path = $path -replace ".zip$"
$path += ''
$fileSeed++
$path = "$path$fileSeed.zip"
} until ( ! (Test-Path $path) )
} else {
$path
}
答案 0 :(得分:1)
前一段时间,我已经为那个叫做Get-UniqueFileName
的函数编写了一个小函数。
function Get-UniqueFileName {
[CmdletBinding()]
Param(
[Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, Mandatory = $true, Position = 0)]
[Alias('FullName')]
[string]$Path
)
$directory = [System.IO.Path]::GetDirectoryName($Path)
$baseName = [System.IO.Path]::GetFileNameWithoutExtension($Path)
$extension = [System.IO.Path]::GetExtension($Path) # this includes the dot
# get an array of all files with the same extension currently in the directory
$allFiles = @(Get-ChildItem $directory -File -Filter "$baseName*$extension" | Select-Object -ExpandProperty Name)
# construct the possible new file name (just the name, not hte full path and name)
$newFile = $baseName + $extension
$seed = 1
while ($allFiles -contains $newFile) {
# add the seed value between brackets. (you can ofcourse leave them out if you like)
$newFile = "{0}({1}){2}" -f $baseName, $seed, $extension
$seed++
}
# return the full path and filename
return Join-Path -Path $directory -ChildPath $newFile
}
像这样使用它:
Get-UniqueFileName -Path 'D:\Test\TestFile.zip'
如果目录D:\Test
已经包含一个名为TestFile.zip
的文件和另一个名为TestFile(1).zip
的文件,它将返回D:\Test\TestFile(2).zip