«Вызов исключения» Подстрока «с» 2 «аргумент (ы):» startIndex не может быть больше длины строки "Использование Powershell - PullRequest
0 голосов
/ 04 июля 2019

Мне нужно искать в файлах поиска каталога (все они имеют одинаковое расположение имен).Посмотрите позицию 9,10,11 в имени файла, создайте каталог с базой из 3 символов и переместите все файлы с теми же 3 символами в позиции 9,10,11 в созданный каталог.

Код работаетно для каждого найденного файла я получаю сообщение об ошибке

"Исключение вызывает" Подстрока "с аргументом (ами)" 2 ":" startIndex не может быть больше длины строки. "

все файлыимеют длину не менее 25 символов. Показанный код не содержит перемещаемой части файлов, что не относится к ошибке.

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

1 Ответ

0 голосов
/ 06 июля 2019

"Исключение, вызывающее" Подстроку "с аргументом (ами)" 2 ":" startIndex не может быть больше длины строки. "

Эта ошибка указывает, что хотя бы один из элементов файловой системы, возвращаемый dir -recurse, имеет имя менее 8 символов.

Вы можете указать шаблон фильтра * Get-ChildItem (он же dir), который соответствует 11 или более символам:

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

или вы можете отфильтровать любой элемент длиной менее 11 символов в имени, используя Where-Object:

# 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}
...