我需要搜索目录的查找文件(它们都具有相同的名称布局)。在文件名中查找位置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}; }
答案 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}