“使用“ 2”参数调用“ Substring”的异常:“ startIndex不能大于字符串的长度”

时间:2019-07-04 07:39:52

标签: powershell file search substring move

我需要搜索目录的查找文件(它们都具有相同的名称布局)。在文件名中查找位置9,10,11,在这3个字符的基础上创建一个目录,然后将位置9、10,11相同的3个字符的所有文件移动到创建的目录中。

该代码有效,但是找到的每个文件都出现错误

“带有“ 2”个参数的调用“子字符串”的异常:“ startIndex不能大于字符串的长度。”

所有文件的最小长度为25个字符。 所显示的代码没有文件的移动部分,因为与该错误无关。

dir -recurse| %{ 
$id = $_.Name.SubString(8,3); 
if(-not (Test-Path $id)) {mkdir $id}; }

1 个答案:

答案 0 :(得分:0)

  

“带有“ 2”个参数的调用“子字符串”的异常:“ startIndex不能大于字符串的长度。”

此错误表示dir -recurse返回的至少一个文件系统项的名称少于8个字符。

您可以向Get-ChildItem(又名dir)提供一个匹配11个或更多字符的通配符过滤器:

Get-ChildItem -Filter ???????????* -Recurse

或者您可以使用Where-Object过滤掉名称少于11个字符的任何项目:

# You could either use regex
Get-ChildItem -Recurse |Where-Object Name -match '.{11}'
# or inspect the Length property directly
Get-ChildItem -Recurse |Where-Object {$_.Name.Length -ge 11}