Powershell 给定路径';不支持s格式(列出文件)

Powershell 给定路径';不支持s格式(列出文件),powershell,Powershell,我正在尝试将所有文件从NAS移动到云提供商,云提供商不允许在其文件名中使用字符?|/\\*:“,不幸的是,有些文件的文件名中确实包含这些字符 因此,我想在进行迁移之前修复这些文件名,因此我想列出禁止的文件名,但是禁止的字符使Get childItem命令崩溃,我有点卡住了 这是我使用的命令 Get-ChildItem $myPath -Recurse -Force -File | Where-Object {$_.name -match '[?<>|/\\*:"]+'}

我正在尝试将所有文件从NAS移动到云提供商,云提供商不允许在其文件名中使用字符
?|/\\*:“
,不幸的是,有些文件的文件名中确实包含这些字符

因此,我想在进行迁移之前修复这些文件名,因此我想列出禁止的文件名,但是禁止的字符使Get childItem命令崩溃,我有点卡住了

这是我使用的命令

 Get-ChildItem $myPath -Recurse -Force -File | Where-Object {$_.name -match '[?<>|/\\*:"]+'} | select fullname, name
是否有办法使命令失败,但仍能告诉我使其崩溃的文件在哪里?或者是否有其他命令或参数可用于执行我想要的操作

编辑:现在我找到了一个解决方法,而不是使用新的PSDrive安装远程nas,我将其插入nas并使用安装在nas上的linux bash,它支持这些文件名,但我仍然对如何使用powershell执行此操作的答案感兴趣

将此参数与以下参数结合使用:

另一个选项是,如果您说传递
-Directory
不会报告错误,则将
Get Item*-Force
应用于每个目录,并查看是否至少可以将有问题的文件名缩小到特定的目录:

#仅通过“$errs”查找有问题的文件名`
$null=&{Get Item$myPath;Get ChildItem$myPath-Recurse-Force-Directory}|
获取项-Path{Join Path$\ FullName*}-Force-ea SilentlyContinue-ev errs

这与正则表达式无关。
$myPath
的确切值是多少?我的问题不是关于正则表达式,正则表达式是好的,myPath的值是不可逆的,但如果它能帮助您,它就是。'.\ARCHIVES-PRE MIGRATION CLOUD\MKG'我知道该命令是好的,因为如果我在一个目录中使用它,其中没有任何文件禁止使用c我的问题是,如果文件中有禁止字符,它会使命令崩溃,因为你的问题不清楚
$myPath
是指NAS上的位置还是本地NTFS卷。使用
try/catch
块,让
catch
发送错误信息。@MathiasR.Jessen sorry如果不清楚,那是nas上的一个位置
Get-ChildItem : The given path's format is not supported
Char, Line:1 : 1
+ Get-ChildItem path -Recurse -Force  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-ChildItem], NotSupportedException
    + FullyQualifiedErrorId : System.NotSupportedException,Microsoft.PowerShell.Commands.GetChildItemCommand
Get-ChildItem $myPath -Recurse -Force -File -ea SilentlyContinue -ev errs | 
  Where-Object {$_.name -match '[?<>|/\\*:"]+'} | select fullname, name

Write-Verbose -vb 'The following paths caused errors:'
$errs.TargetObject