выглядит как последний шаг (Split()
) утверждения
$longname.Replace("_tiff","").Replace("cns","").Substring(9).Split('".tif"')
предполагается удалить расширение из имени файла. Это не то, как Split()
работает. Метод интерпретирует строку ".tif"
как массив символов и разбивает данную строку на любой из этих символов ("
, .
, f
, i
, t
). Разделив строку 100838953_180130001.tif
, вы получите массив из 5 элементов, последние 4 из которых являются пустыми строками:
[ '100838953_180130001', '', '', '', '' ]
Помещение переменной с этим массивом в строку приводит к преобразованию массива в строку путем объединения его элементов с использованием разделителя выходного поля ($OFS
), который по умолчанию представляет собой один пробел, создавая, таким образом, конечные пробелы, которые вы наблюдали.
Чтобы удалить префикс cns..._
и подстроку _tiff
, а также расширение .tif
из имени файла, используйте следующее:
$shortname = $longname -replace '^cns\d*_|_tiff|\.tif$'
Эта замена регулярного выражения удалит подстроку "cns", за которой следует любое количество цифр и знак подчеркивания в начале строки (^
), подстроку "_tiff" из любого места строки и подстроку " .tif "от конца строки ($
).