Potrzebuję sposobu na zmianę nazwy wszystkich plików w folderach i podfolderach na małe litery.
Chciałbym wiedzieć, czy można to zrobić tylko przy użyciu systemu Windows (XP lub 7)
Potrzebuję sposobu na zmianę nazwy wszystkich plików w folderach i podfolderach na małe litery.
Chciałbym wiedzieć, czy można to zrobić tylko przy użyciu systemu Windows (XP lub 7)
Odpowiedzi:
Przejdź do katalogu i uruchom następujące polecenie:
Oto podział na wypadek, gdyby ktoś chciał zmodyfikować / ulepszyć:
for /f
- Dla każdej linii"Tokens=*"
- Przetwarzaj każdy element w każdym wierszu.%f in (...)
-%f
to twoja nazwa zmiennej dla każdego elementu.dir
- wyświetla listę wszystkich plików i podkatalogów w katalogu./l
- (parametr dla katalogu) Używa małych liter./b
- (parametr dla katalogu ) Używa czystego formatu, tylko nazwy plików / katalogów, bez rozmiaru, bez nagłówków./a-d
- (parametr dla dir) Czy nie listy katalogów . (a
oznaczaattribute
,-
oznaczanot
id
oznaczadirectory
) .rename "%f" "%f"
- zmień nazwę pliku na własną nazwę, która w rzeczywistości jest małymi literamidir
polecenia i/l
kombinacji.źródło
for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")
(dodano / r do reż.)spacetornado Renamer to program Windows, który zmienia nazwy masowych plików w partiach. Możesz wyszukiwać i zamieniać tekst, usuwać określoną liczbę znaków, zmieniać wielkość liter na małe, górne lub wielkie litery pierwszej litery, a także dodawać tekst na początku lub na końcu (dołączanie / dodawanie) każdej nazwy pliku
źródło
Od Windows 7 możesz używać PowerShell do tych zadań
- Wybierz folder główny
- wszystkie pliki w folderze głównym i podfolderach są zmieniane
- nazwy folderów są wykluczone za pomocą
Where {-Not $_.PSIsContainer} |
źródło
Oto właściwe rekurencyjne rozwiązanie wiersza polecenia, które używa tylko natywnych poleceń cmd.exe, które faktycznie działają. Uważam, że jest to najprostsze możliwe rozwiązanie natywne:
Jeśli chcesz wyjść poza natywne polecenia cmd.exe, inną opcją jest moje narzędzie do zmiany nazw wyrażeń regularnych JREN.BAT, które obsługuje opcje konwersji nazw na wielkie lub małe litery. Jest to czysty skrypt (hybrydowy JScript / partia), który działa natywnie na dowolnym komputerze z systemem Windows od XP - pliki exe innych firm nie są potrzebne. Pełna dokumentacja jest wbudowana - dostęp z wiersza poleceń za pośrednictwem
jren /?
lub,jren /??
jeśli chcesz uzyskać wynik stronicowany.W przypadku JREN rozwiązanie rekurencyjne jest tak proste, jak:
źródło
/a-d
przełącznik, a także zmniejszy małe litery w nazwach folderów." D"') was unexpected at this time.
Uruchomienie go jako polecenia bezpośredniego działa dobrze, po prostu nie działa, gdy jest uruchamiane jako plik wsadowy. Nie jestem pewien, jak sprawić, by działał jako plik wsadowy, ale pomyślałem, że podniosę sprawę.%D
musi zmienić%%D
, a%F
na%%F
razie można umieścić polecenia w skrypcie wsadowym.Moim ulubionym narzędziem do zmiany nazw plików wsadowych jest WildRename Cyloga . Wśród wielu innych funkcji może zmieniać wielkość liter. Najlepszą rzeczą w WildRename jest prawdopodobnie to, że obsługuje wyrażenia regularne!
źródło
„Rekurencyjna” wersja zaakceptowanej odpowiedzi (która działa *)
for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"') do (for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g"))
Pierwsza pętla
for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"')
Pobiera listę ścieżek bezwzględnych wszystkich katalogów w bieżącym (w tym):
C: \ Foo>
C: \ Foo \ TO.txt
C: \ Foo \ Bar \ LOWER.txt
C: \ Foo \ Bar \ Baz \ CASE.txt
Druga pętla
for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g")
Pobiera listę wszystkich nazw plików (lub nazw plików i katalogów, jeśli wyjmiesz
/a-d
przełącznik) w każdej z bezwzględnych ścieżek znalezionych w pierwszej pętli i konwertuje nazwy tych plików na małe litery.C: \ Foo \ TO.txt
C: \ Foo \ Bar \ LOWER.txt
C: \ Foo \ Bar \ Baz \ CASE.txt
* potrzebuje dwóch pętli, ponieważ drugim argumentem
rename
musi być nazwa pliku, a nie ścieżka bezwzględna (taka jak uzyskana przez/s
przełącznik).źródło
cmd /c "echo %cd%&
w pierwszymfor
? Jest to całkowicie niepotrzebne.echo %cd%
jest tutaj, aby dodać bieżący folder do listy absolutnych ścieżek ; icmd /c
sprawia, że&
łączą polecenia. Jestem totalnym noobem w zakresie Windows Batch Scripting ; jeśli znasz lepszy sposób, popraw odpowiedź!Możesz użyć strategii „zamiany postaci” ...
... i tak dalej, dla liter AZ. Prawdopodobnie można go zaimplementować w postaci pętli FOR.
źródło
http://www.dostips.com/DtCodeCmdLib.php#Function.toLower zapewnia prostą funkcję, którą powinieneś być w stanie dołączyć i wywołać z pliku wsadowego.
Niech plik wsadowy przejdzie przez nazwy folderów / plików i wywołaj tę funkcję, aby wygenerować małą wersję nazwy.
źródło
Od http://windowsitpro.com/articles/index.cfm?articleid=81612 :
Używając tylko standardowych poleceń, napisałem skrypt LwrCase.bat i LwrCase_Folder.bat, aby zmienić nazwę pliku na małe litery lub zmienić nazwy wszystkich nazw plików w folderze na małe litery.
Aby zmienić nazwę pliku na małe litery, użyj:
Gdzie FullyQualifiedFileName to w pełni kwalifikowana nazwa pliku, którego nazwę należy zmienić.
Aby zmienić nazwy wszystkich nazw plików w katalogu, użyj:
gdzie FullyQualifiedDirectoryName jest pełną ścieżką do folderu, a / S jest opcjonalnym parametrem, który zmieni także nazwy plików we wszystkich podfolderach.
UWAGA: LwrCase.bat korzysta z przełącznika / L polecenia DIR, który zwraca nazwy małych liter.
LwrCase.bat zawiera:
LwrCase_Folder.bat zawiera:
źródło
Najlepszym programem do robienia tego w systemie Windows jest narzędzie Bulk Rename Utility . To narzędzie mężczyzny. Możesz nawet użyć wyrażenia regularnego, aby zmienić nazwę plików i / lub folderów. Ma również integrację z powłoką (dzięki czemu można uruchomić z Eksploratora jednym kliknięciem), co jest bardzo miłe. Dostępne wersje 64-bitowe i 32-bitowe.
źródło
Akceptowana odpowiedź na to pytanie autorstwa loftysnake działa dla bieżącego katalogu, ale nie przeszukuje podfolderów. Sawny zasugerował prostą modyfikację odpowiedzi loftysnake, aby była rekurencyjna, ale nie działa, ponieważ chociaż
rename
polecenie pozwala określić dysk i ścieżkę o nazwie nazwa_pliku1 (źródło), nazwa_pliku2 (miejsce docelowe) musi być tylko nazwą pliku . Aby zacytować komunikat pomocy (/?
),Ale
move
działa tam, gdzierename
nie działa, dzięki czemu możesz rekurencyjnie zmieniać nazwy plików na małe litery za pomocą tego polecenia:bo okazuje się, że
Move
poradzi sobie ze ścieżkami katalogów.Powyższe polecenie działa, gdy zostanie wpisane bezpośrednio w wierszu polecenia (
CMD.EXE
). Jeśli chcesz to zrobić z pliku batch (.BAT
), musisz podwoić%
znaki:I prawdopodobnie możesz zrezygnować z nawiasów i
/y
i powiedzieć sprawiedliwiedo move …
.źródło
move
działało tam, gdzierename
nie działa i myślę, że tylko ja zasugerowałem użyciemove
polecenia tutaj. Po prostu wziąłem sugestie @loftysnake i @sawny i mam nadzieję, że trochę je poprawiłem.move
, ale nie mogę go teraz znaleźć.Rozwiązanie rekurencyjne. Umieść to w pliku recursiverename.cmd ..
źródło
PowerShell
Przejdź do katalogu i uruchom:
Sprawdziłem, czy to działa. Znaleziono tutaj: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx
źródło