【问题标题】:Feeding Get-ChildItem path info from an array - Illegal characters从数组中提供 Get-ChildItem 路径信息 - 非法字符
【发布时间】:2023-03-14 08:16:01
【问题描述】:

我需要遍历一个文件夹名称数组,将它们传递给GCI,这样我就可以对其内容运行操作。不管我做什么,它总是给我这个错误:

gci : 路径中的非法字符。 在 C:\Scripts\Arvest_submission_monitoring.ps1:86 char:5 + gci -path "D:\subftp\$_" -recurse { + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (D:\SUBFTP\folder1:String [Get-ChildItem], ArgumentException + 完全限定错误 ID: DirArgumentError,Microsoft.PowerShell.Commands.GetChildItemCommand

我已经创建了一个数组:

$folders = "folder1","folder2","folder3"

然后对其进行迭代:

$folders | % {
  gci -Path "D:\subftp\$_" -Recurse {
    #do stuff here
  }
}

我尝试了许多不同的选项,例如正则表达式替换以删除任何可能的非法字符(尽管 $folder.Count 显示没有不可见字符),我尝试将 $folders 转换为 C# ArrayList 但它是还是不行。我什至在使用前将路径变量本身连接成一个字符串。

奇怪的是,如果我尝试从命令行执行它,它工作正常。是什么赋予了?我正在运行 v5。

【问题讨论】:

  • 你试过-LiteralPath而不是-Path吗?
  • 请显示实际路径。
  • 我试图避免识别信息,但它们都采用这种格式:“D:\SUBFTP\58-BANK”并且不会 -LiteralPath 忽略我试图传递的变量?
  • 双引号内的变量将被扩展之前值绑定到参数
  • $folder.Count 不会向您显示任何有用的信息 - 执行 $_.IndexOfAny([System.IO.Path]::GetInvalidFileNameChars()) 并观察它是否返回除 -1 之外的任何值 other。 IE。 "not?a?valid*filename".IndexOfAny([System.IO.Path]::GetInvalidFileNameChars()) 将返回 3,因为索引 3 处的 ?

标签: powershell


【解决方案1】:

这是由命令末尾的花括号引起的 gci -Path "D:\subftp\$_" -Recurse {

可能你想这样做:

$folders | ForEach-Object {
  Get-ChildItem -Path "D:\subftp\$_" -Recurse | ForEach-Object {
    #do stuff here
  }
}

【讨论】:

  • 看起来这是个问题,我有点疏忽了。尽管如此,它抛出的错误还是非常具有误导性的。
猜你喜欢
  • 2018-01-09
  • 2020-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多