【问题标题】:Powershell: For each loop loop with list issuesPowershell:对于每个带有列表问题的循环
【发布时间】:2023-04-09 10:07:01
【问题描述】:

我正在尝试通过我创建的函数循环列表。我想对循环做的是,函数内部的变量:“$huidige_folder”一次填充一个列表中的位置,循环并继续列表中的下一个位置

  1. 所以列表中的第一项:“C:\Users\Nick\Desktop\Test1”。它用 函数中的这个位置
  2. 然后是 C:\Users\Nick\Desktop\Test2"。它在 功能
  3. 然后是 C:\Users\Nick\Desktop\Test3"。它在 功能

但是当我运行代码时,它只会运行列表中第一项的函数。那行得通,它做我想要的。 但在那之后它会停止并且不会为列表中的其他 2 项运行该功能。

我做错了什么?

$path_dagelijkse_controle = "C:\Users\Nick\Desktop\Test1",
                            "C:\Users\Nick\Desktop\Test2", 
                            "C:\Users\Nick\Desktop\Test3"



function Dagcontrole_folders_maken {($huidige_folder)

$Dagelijkse_controle = "Dagelijkse controle"
$datum_vandaag = $(Get-Date).toString('yyyy-MM-dd')
$jaar = $datum_vandaag.Substring(0,4)
$maand = $datum_vandaag.substring(5, 2)
$dag = (get-date).DayOfWeek

$path_jaar = Get-Item -Path "$huidige_folder\**" -Include *$jaar*
$path_maand = Get-Item -Path "$huidige_folder\$jaar\**" -Include *$maand*
$folder_maand = Get-Date -UFormat "%m - %B"


if ($path_jaar) {
    Write-Output "Do Nothing"
}
Else {   
    md -Path "$huidige_folder\$jaar"   
}

if ($path_maand) {
  md -Path "$huidige_folder\$jaar\$folder_maand\Dagelijks\$datum_vandaag"  
}
Else {
    md -Path "$huidige_folder\$jaar\$folder_maand"                              # Makes the month folder
    md -Path "$huidige_folder\$jaar\$folder_maand\Dagelijks\$datum_vandaag"     # Makes a folder with current date inside the month folder
}

}


Foreach ($i in $path_dagelijkse_controle) {
    Dagcontrole_folders_maken($i)
    }

【问题讨论】:

  • function Dagcontrole_folders_maken {($huidige_folder) 更改为 function Dagcontrole_folders_maken ($huidige_folder) {
  • 您可以使用md .. -Force 大大简化您的代码。

标签: list powershell loops foreach


【解决方案1】:

我会改变你的函数声明:

function Dagcontrole_folders_maken ([String]$huidige_folder) {

这意味着$huidige_folder被声明为一个字符串。但主要问题是 { 字符放置在错误的位置。它必须放在参数之后。

我还建议您解析函数中的所有元素。您可以将 ForEach 写入函数并将字符串数组作为参数。这样,您的函数就可以使用一个或多个元素。

function Dagcontrole_folders_maken ([String[]]$huidige_folder) {
ForEach($folder in $huidige_folder) {
...

【讨论】:

    【解决方案2】:

    尝试删除 $i 周围的括号。

    与大多数语言不同,Powershell 不需要在函数调用的实际参数周围加上括号。他们可能正在造成伤害。

    另外,感谢lieven Keersmaekers,定义中的左大括号应该在参数定义之后,而不是之前。

    【讨论】:

      猜你喜欢
      • 2011-07-15
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2021-01-27
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      相关资源
      最近更新 更多