8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Powershell 函数返回目录对象而不是字符串

Agnel Selvan 2月前

46 0

我正在编写一个 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

调试时,该函数似乎正在返回一个目录对象。我提供了该变量的屏幕截图。

enter image description here

我希望该函数返回已创建的子目录。我不确定为什么该函数不将子目录作为字符串返回。

帖子版权声明 1、本帖标题:Powershell 函数返回目录对象而不是字符串
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Agnel Selvan在本站《powershell》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 您的代码存在问题,它 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
    }
    
返回
作者最近主题: