Mam listę około 30 000 plików (ze ścieżkami), które należy indywidualnie skopiować wraz ze strukturami folderów. Niestety ścieżki są bardzo długie, a narzędzia do kopiowania plików obsługujące tę funkcję wymagają określenia folderów docelowych dla każdego pliku, co oznacza, że muszę usunąć nazwę pliku z każdego z 30 000 wierszy, pozostawiając nienaruszoną strukturę folderów.
Muszę znaleźć sposób na zastąpienie wyrażenia regularnego w Notepad ++, który usunie wszystkie dane w każdym wierszu dokumentu po ostatnim ukośniku odwrotnym „\” w wierszu.
Przykład:
C:\Data\ToCopy\file1.txt
C:\Data\ToCopy\Folder1\file2.txt
C:\Data\ToCopy\Folder2\file3.txt
C:\Data\ToCopy\Folder2\Subfolder1\file4.txt
Pożądane wyjście:
C:\Data\ToCopy
C:\Data\ToCopy\Folder1
C:\Data\ToCopy\Folder2
C:\Data\ToCopy\Folder2\Subfolder1
Jakieś pomysły na sformatowanie wyrażenia, aby to umożliwić? Próbowałem [^"\"]+$
, ale wydaje się to nieważne.
Odpowiedzi:
Możesz użyć grupy przechwytywania RegEx (oznaczonej nawiasami okrągłymi), aby przechwycić wszystkie znaki (
.*
) aż do (i włącznie) ukośnika (\\
- musisz „uciec” ukośnikowi innym ukośnikiem), a także dołączyć resztę znaki w dopasowaniu Regex (drugi.*
), ponieważ chcemy je również zastąpić.Następnie zastąp całą linię zawartością (tylko) tej grupy przechwytywania (
\1
).Więc to działa dla mnie:
Odnaleźć:
(.*\\).*
Zamienić:
\1
Upewnij się, że „. Pasuje do nowej linii” jest wyłączone.
źródło
Odpowiedziałem na własne pytanie, mam nadzieję, że pomoże to innej osobie próbującej skopiować określoną listę plików do ich oryginalnej struktury folderów. Edytuj listę w Notepad ++ i użyj funkcji zamiany (wybierz „Wyrażenie regularne”) i użyj następującego ciągu:
\\(?<=\\)[^\\]+$
Zastąp to spacją i możesz zacząć.
źródło
\\[^\\]+$