我正在编写一个 powershell 函数,它接受 2 个参数来检查目录是否存在。如果目录存在,则通过在末尾添加一个计数器来循环,直到目录不存在...
我正在编写一个 powershell 函数,它使用 2 个参数来检查目录是否存在。如果目录存在,则通过在文件夹末尾添加计数器来循环直到目录不存在并创建目录。一旦找到不存在的目录,则返回新的子文件夹。
function Check-PatientDirectory{
param (
[string]$rootDirectoryName,
[string]$subDirectoryName
)
# Initialize a counter
$counter = 1
# Store the original directory path
$newSubDirectoryName = $subDirectoryName
$testDirectoryPath = "$($rootDirectoryName)$($newSubDirectoryName)"
# Loop until a directory with a unique name is found
while (Test-Path -Path $testDirectoryPath) {
# Increment the counter
$counterString = $counter.ToString("D4")
$testDirectoryPath = "$($rootDirectoryName)$($newSubDirectoryName)_$($counterString)\"
$counter++
}
New-Item -Path $testDirectoryPath -ItemType Directory
Return $newSubDirectoryName
}
下面是我在主体中调用该函数的代码:
#Check Patient Subfolder
$outputLocation = "C:\Temp\"
$test = "test_folder"
$newSubDirectory = Check-PatientDirectory -rootDirectoryName $outputLocation -subDirectoryName $test
$outputLocation = "$($newSubDirectory)"
Write-Host $outputLocation
输出为
C:\Temp\test_folder_0001 test_folder
调试时,该函数似乎正在返回一个目录对象。我提供了该变量的屏幕截图。
我希望该函数返回已创建的子目录。我不确定为什么该函数不将子目录作为字符串返回。
您的代码存在问题,它 New-Item
产生的输出未被捕获或重定向。解决方案可以是将其输出分配给 $null
或管道分配给 Out-Null
(还有其他方法):
# this
$null = New-Item -Path $testDirectoryPath -ItemType Directory
# or this
New-Item -Path $testDirectoryPath -ItemType Directory | Out-Null
您也可以直接删除 return $newSubDirectoryName
并重新使用 New-Item
扩展 .FullName
(您也可能希望 return $testDirectoryPath
在实际代码中这样做,因为这是新创建的文件夹)。
function New-PatientDirectory {
param(
[Parameter(Mandatory)]
[string] $RootDirectoryName,
[Parameter(Mandatory)]
[string] $SubDirectoryName
)
# Initialize a counter
$counter = 1
# Store the original directory path
$base = Join-Path $RootDirectoryName $SubDirectoryName
# Loop until a directory with a unique name is found
do {
# Increment the counter
$path = "${base}_$($counter.ToString('D4'))"
$counter++
}
while (Test-Path -Path $path)
# output the absolute path
(New-Item -Path $path -ItemType Directory).FullName
}