PowerShell Rename Files

Panewki mam jakieś 160 tysięcy plików do przejrzenia i zmiany nazwy a raczej usunięcie z nich ciągu string.

Wszelkie programy jakie próbowałem niestety nie dają sobie rady, albo zawieszą się w czasie zapisu albo wgl nigdy nie załadują tych plików.
Dlatego zasięgnąłem tradycji i niezawodności, a więc PowerShell. Otwieram sobie w folderze głównym dokładnie jest to wielka biblioteka SFX. Wykonuję polecenie

gci -r | foreach { rename-item $_ $_.Name.Replace("-hollywood", "") }

I niby się wykonuje ale jest bład:

rename-item : Cannot rename because item at 'shs_dt_vocal_breathy_spirits_2_129.wav' does not exist.
At line:1 char:20
+ ... i -r | foreach { rename-item $_ $_.Name.Replace("-hollywood", "") }
+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand

Hierarchia katalogów jest naprawdę różna może być to 2-3-4 podkatalogi i tak dalej.
Ale uruchamiając polecenie w folderze z plikami audio lub katalogu przedostatnim działa to prawidłowo zmieniając nazwę w wszystkich plikach w katalogach znajdującym się w tym katalogu.

Z kolei używając

Get-ChildItem -r | Rename-Item -NewName { $_.Name -replace '-hollywood,'' }

Dostaje strasznie dużo informacji:

Rename-Item : Ścieżka źródłowa musi różnić się od ścieżki docelowej.
At line:1 char:20
+ ... ldItem -r | Rename-Item -NewName { $_.Name -replace '-hollywood','' ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (F:\New\Zenhiser - Designer SFX\Uplifter:String) [Rename-Item], IOException
    + FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand

Wypróbuj windows - Replace or delete certain characters from filenames of all files in a folder - Stack Overflow

Wysyłasz mnie do polecenia które wygląda jak moje?

Przyjrzyj się, wykorzystuje Move-Item, chodzi o odpowiedź napisaną przez Dustin Malone. Tam jest też wyjaśnione dlaczego polecenia, które próbowałeś poprzednio nie działają

Od składni PowerShella można dostać raka.
Spróbuj Ant Renamer, ma całkiem szeroki wachlarz wyrażeń regularnych, no i jest w GUI.

1 polubienie

Witaj @dominikk26

Do zrobienia za pomocą Autohotkey

Jeśli nadal szukasz rozwiązania, daj znać
Wrzucę skrypt i napiszę jak używać AHK

Pozdrawiam serdecznie
Juliusz

Więc wytłumacz mi co ma move item do rename bo nie rozumiem.
Chodzi o to, że move item też pozwala zmienić nazwę oraz przedstawiony przykład przenosi plik w te samo miejsce?

Problem rozwiązany tak jak wyżej napisałem zrobić zrobiłem (bo działa [Bradlee] lecz wyrzuca błędy ale idzie dalej i robi co trzeba) jednakże liczyłem, że ktoś mi pomoże rozwiązać problem z wywalaniem tych błędów w konsoli. Skądś się biorą i warto wiedzieć czemu i jak się ich pozbyć rozwiązania w Internety nie znalazłem, nie jestem też zawansowany, aby sam to rozwiązać na poziomie.

No niby można dostać [Berion] ale im dłużej czytam o tym tym bardziej przejrzyste się to staje a zarazem dostrzega się prostotę i w zasadzie sporą ułatwiającą automatyzację, noi jest ta niezawodność tak jak pisałem programy nie były wstanie sobie dać rady z 170 tysiącami plików i katalogów. Power Shel za to zrobił to w jakieś 3-5 sekundy :slight_smile:

Dla potomnych wykorzystałem polecenie:
Get-ChildItem | Rename-Item -NewName { $_.Name -replace 'remove_string_text','' }

Oraz w ramach ciekawostki licznik ilości plików w danych rozszerzeniach:
Get-ChildItem -Recurse -force -File | group Extension -NoElement | sort Count -Descending

A tutaj tabelka licząca rozmiar dla danej grupy rozszerzenia plików:
Get-ChildItem -r -force -file | Group-Object extension | Select-Object name, @{n='TotalSize';e={$_.group | ForEach-Object -Begin {$size=0} -Process {$size += $_.length} -End {$size}}} | Sort-Object -Property 'TotalSize' -Descending | Format-Table -AutoSize

1 polubienie

Jak zawsze w przypadku skryptów. Do mnie jednak obiektowość ps nie przemawia, do tego strasznie długie i często nieintuicyjne są te polecenia, z kolei cmd jest za ubogi. W zasadzie to pozwoliłem sobie na offtop z tym programem, ale w pierwszym poście napisałeś że już jakieś testowałeś i poległy to może ten konkretny dał by radę.