Я выполняю некоторую работу, связанную с некоторым автоматическим перемещением файлов, и эти файлы содержат относительные пути, которые необходимо поддерживать.К сожалению, я считаю, что средства, предлагаемые операторами System.IO.Path, System.String и Powershell, немного плохо приспособлены для изящного управления моей работой.
Одна функция, которая была бы очень полезна дляЯ - это понятие вычитания путей, которое теоретически работало бы как вычитание векторов.Концептуально, A - B дает вам путь от B к A. В приложении к путям D:\A\B\C\D - D:\A\B\ = \C\D
.Аналогично, D:\A\B\ - D:\A\B\C\D = \..\..
в этом случае.На данный момент я могу согласиться с тем, что это имеет смысл только тогда, когда один путь целиком содержится в другом.
Это, как представляется, состоит из двух этапов: 1) определение содержания одного пути в другом.2) удалить содержащийся путь из содержащего пути.3) При необходимости замените имена папок родительским символом .. в зависимости от односторонности операции.
Поскольку я занимаюсь NTFS, мне нужно, чтобы операции локализации и замены не учитывали регистр.Для сдерживания я могу использовать select-string, так как он не чувствителен к регистру и позволяет использовать ключ -simple, который позволяет мне использовать путь, не разбивая его на части, чтобы избежать их для регулярного выражения.
Удаление строки издругой немного более раздражает, хотя.System.IO.Path ничего не имеет для этого, все подходящие методы System.String чувствительны к регистру, а все операторы powershell требуют массирования, чтобы регулярное выражение совпадало.
Все это выглядит как большая работа, чем следовало быбыть - есть какие-то инструменты, которые мне не хватает, которые бы лучше справились с этим?