2

У меня есть список из около 30000 файлов (с путями), которые должны быть скопированы по отдельности вместе со структурой их папок. К сожалению, пути очень длинные, и утилиты копирования файлов, которые будут обрабатывать эту функцию, требуют, чтобы я указывал папки назначения для каждого файла, а это значит, что мне нужно удалить имя файла из каждой из 30 000 строк, оставив структуру папок без изменений.

Что мне нужно сделать, так это найти способ замены регулярного выражения в Notepad++, который удалит все данные в каждой строке документа после последней обратной косой черты в строке.

Пример:

C:\Data\ToCopy\file1.txt
C:\Data\ToCopy\Folder1\file2.txt
C:\Data\ToCopy\Folder2\file3.txt
C:\Data\ToCopy\Folder2\Subfolder1\file4.txt

Желаемый результат:

C:\Data\ToCopy
C:\Data\ToCopy\Folder1
C:\Data\ToCopy\Folder2
C:\Data\ToCopy\Folder2\Subfolder1

Любые идеи о том, как отформатировать выражение, чтобы позволить это? Я пробовал [^"\"]+$ , но, похоже, это неверно.

2 ответа2

1

Вы можете использовать группу захвата RegEx (обозначенную круглыми скобками) для захвата всех символов (.*) Вплоть до (и включая) косой черты (\\ - вам нужно «экранировать» косую черту другой косой чертой), а также включить остальные символы в регулярном выражении совпадают (второй .*), так как мы хотим также заменить их.

Затем замените всю строку содержимым (просто) этой группы захвата (\1).

Так что это работает для меня:

Найти: (.*\\).*

Заменить на: \1

Убедитесь, что ". Соответствует новой строке" отключена.

0

Я ответил на свой вопрос, надеюсь, это поможет кому-то другому, пытающемуся скопировать определенный список файлов в их исходную структуру папок. Отредактируйте список в Notepad++ и используйте функцию замены (выберите «Регулярное выражение») и используйте следующую строку:

\\(?<=\\)[^\\]+$

Замените это пробелом, и все готово.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .