![]() |
обрезка спец символов и создание папки при копировании файла с очень длинным путем
добрый.
Имеем такой скрипт с формой:
Код:
Add-Type -assembly System.Windows.Forms Задача: 1) Значения TextBox.Text(1-3) пишутся в переменную, и нужны для дальнейшего использования при создании папки (п.2). В связи с этим, нужно чтобы при вводе текста (посредством ctrl + V) в поле ввода - сразу же обрезались/удалялись спецсимволы (на которые ругается винда при создании папки при их наличии, т.е ",","/" и т.д), а остались только допустимые. * т.е скопировал - Код:
",те:к'ст/\" Код:
текст Код:
$name1 = $TextBox.Text -replace '"', "" -replace '''', "" -replace ':', "" -replace ',', "" -replace '/', "" -replace '\\', "" 2) есть файл temp.mp4 по пути - очень\очень\очень\очень длинный путь с кучей символов, пробелов и русских букв\temp.mp4. *при работе с этими путями в проводнике, часто натыкаюсь на ошибку - file path too long. Поэтому проблему очень длинного пути нужно обязательно учесть. **видел где-то про то, что можно часть пути посадить в переменную (или что-то вроде того) и тогда проблема длинного пути уходит (не помню точно...) нужно temp.mp4 скопировать по очень\длинному\пути с русскими буквами\$date-$name1\кс\$name1.mp4". при этом папки "$date-$name1" с подпапкой "кс" - нет на момент копирования. Она должна создаваться. 3) изначальная папка с temp.mp4 - очень\очень\очень\очень длинный путь с кучей символов и русских букв\ - должна очищаться от всего содержимого, без удаления самой папки. заранее спасибо за помощь. |
1) Некорректные символы для путей и файлов :
Код:
('FileName', 'Path').ForEach{[IO.Path]::"GetInvalid$($_)Chars"()} 2) Если в системе разрешены длинные пути (>260 символов), лучше избегать рекурсии, отдав предпочтение обходу дерева каталога. Использование кириллицы лучше избегать в длинных путях (не только в виду схожести некоторых символов алфавитов, но и проблемы с буферной памятью). 3) см. пункт 2. |
greg zakharov, и тем не менее.. п.2 и п.3 надо работать как есть.
Какие есть варианты с обходом длинных путей? |
9119, не хотелось бы рубить с плеча и пороть горячку, нужно подумать как всё реализовать аккуратно.
|
1)
Цитата:
Или каждый знак ручками прописывать? ) 2) и как именно подставить параметр -replace непосредственно к textbox.text ? он сейчас выглядит так: Код:
$TextBox.Text = 'ведите название ролика 1...' |
1) Для чего под каждый символ? Было же написано, что из полученных значений формируете регулярное выражение, которое и применяете к строке.
2) Код:
$TextBox.Text = "строка" -replace $regex |
greg zakharov,
Код:
$regex = ('FileName', 'Path').ForEach{[IO.Path]::"GetInvalid$($_)Chars"()} |
Время: 23:28. |
Время: 23:28.
© OSzone.net 2001-