2009-11-04 00:22:52 +0000 2009-11-04 00:22:52 +0000
65
65

Czy istnieje sposób na wsadową zmianę nazw plików na małe litery?

Potrzebuję sposobu, aby zmienić nazwy wszystkich plików w folderach i podfolderach na małe litery.

Chciałbym wiedzieć, czy istnieje sposób, aby to zrobić używając tylko windows (XP lub 7).

Odpowiedzi (13)

128
128
128
2012-04-14 13:25:17 +0000

Przejdź do katalogu i uruchom następującą komendę:

for /f "Tokens=*" %f in ('dir /l/b/a-d') do (rename "%f" "%f")

Oto podział na wypadek, gdyby ktoś chciał zmodyfikować/poprawić :

  • for /f - Dla każdej linii
  • "Tokens=*" - Przetwarzaj każdy element w każdej linii.
  • %f in (...) - %f jest twoją nazwą zmiennej dla każdego elementu.
  • dir - wymienia każdy plik i podkatalog w katalogu.
  • /l - (parametr dla dir) Używa małych liter.
  • /b - (parametr dla dir) Używa czystego formatu, tylko nazwy plików/katalogów, bez rozmiaru, bez nagłówków.
  • /a-d - (parametr dla dir) Do not list directories. (a oznacza attribute, - oznacza not i d oznacza directory).
  • rename "%f" "%f"- zmień nazwę pliku na jego własną nazwę, która w rzeczywistości jest pisana z małej litery przez komendę dir i kombinację /l.
18
18
18
2009-11-04 00:26:39 +0000

Spacetornado Renamer ](http://www.spacetornado.com/Renamer/) jest programem Windows, który zmienia nazwy masowej ilości plików w partiach. Można wyszukiwać i zamieniać tekst, usuwać określoną liczbę znaków, zmieniać wielkość liter na małe, duże lub duże litery, a także dodawać tekst na początku lub końcu (append/prepend) każdej nazwy pliku

12
12
12
2015-02-24 18:33:51 +0000

Od Windows 7 można użyć PowerShell do tych zadań

Get-ChildItem "C:\path\to\folder" -recurse | 
  Where {-Not $_.PSIsContainer} | 
  Rename-Item -NewName {$_.FullName.ToLower()}
  • wybierz folder główny
  • wszystkie pliki wewnątrz folderu głównego i podfolderów są zmieniane
  • nazwy folderów są wykluczane z Where {-Not $_.PSIsContainer} |.
9
9
9
2016-07-21 22:07:04 +0000

Oto właściwe rozwiązanie rekursywnego wiersza poleceń przy użyciu tylko natywnych poleceń cmd.exe, które faktycznie działa. Wierzę, że jest to najprostsze możliwe natywne rozwiązanie:

for /r %D in (.) do @for /f "eol=: delims=" %F in ('dir /l/b/a-d "%D"') do @ren "%D\%F" "%F"

Jeśli jesteś skłonny wyjść poza natywne polecenia cmd.exe, to inną opcją jest moje JREN.BAT narzędzie do zmiany nazw wyrażeń regularnych które obsługuje opcje konwersji nazw na duże lub małe litery. Jest to czysty skrypt (hybrydowy JScript/batch), który działa natywnie na każdej maszynie Windows od XP wzwyż - nie potrzeba żadnych plików exe innych firm. Pełna dokumentacja jest wbudowana - dostępna z linii poleceń przez jren /?, lub jren /?? jeśli chcesz stronicowane wyjście.

Z JREN, rozwiązanie rekurencyjne jest tak proste jak:

jren "^" "" /s /l
6
6
6
2009-12-05 20:17:27 +0000

Moim ulubionym narzędziem do zmiany nazw plików jest WildRename . Wśród wielu innych funkcji, potrafi zmieniać wielkość liter w nazwach plików. Najlepszą rzeczą w WildRename jest prawdopodobnie to, że obsługuje on wyrażenia regularne!

5
5
5
2016-05-06 15:53:33 +0000

“Rekursywna” wersja przyjętej 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ę absolutnych ścieżek wszystkich katalogów wewnątrz bieżącego (łącznie z nim):

C:\Foo>

  • C:\Foo \TO. txt

  • C:_C:ΟFoo ΟBAR** ΟBOWER. txt

  • C:^FooBar ^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 nazwy plików i katalogów, jeśli wyjmiesz przełącznik /a-d) wewnątrz każdej z absolutnych ścieżek znalezionych przez pierwszą pętlę, i konwertuje nazwy tych plików na małe litery.

  • C:\Foo\ TO.txt

  • C:\Foo\Bar\ LOWER.txt

  • C:\Foo\Bar\ CASE. txt


  • potrzebuje dwóch pętli, ponieważ drugim argumentem do rename musi być nazwa pliku, a nie absolutna ścieżka (jak ta uzyskana przez przełącznik /s).
3
3
3
2013-04-07 17:06:17 +0000

Mógłbyś użyć strategii “zamiany znaków”…

set Name=%Name:A=a%
set Name=%Name:B=b%
set Name=%Name:C=c%

…i tak dalej, dla liter A-Z. Prawdopodobnie mógłbyś to zaimplementować w formie pętli FOR.

1
1
1
2011-03-03 00:33:58 +0000

Najlepszym programem do zrobienia tego w Windows jest Bulk Rename Utility . Jest to narzędzie stworzone przez ludzi. Możesz nawet użyć regex do zmiany nazw plików i/lub folderów. Ma również integrację z powłoką (więc możesz wykonać z eksploratora prawym przyciskiem myszy), co jest bardzo miłe. Dostępne są wersje 64-bitowe i 32-bitowe.

1
1
1
2009-11-04 00:56:45 +0000

http://www.dostips.com/DtCodeCmdLib.php#Function.toLower ](http://www.dostips.com/DtCodeCmdLib.php#Function.toLower) daje prostą funkcję, którą powinieneś być w stanie dołączyć i wywołać z pliku wsadowego.

Więc zleć plikowi wsadowemu iterację po folderach/nazwy filmów i wywołaj tę funkcję, aby wygenerować małą literę w nazwie.

1
1
1
2009-12-05 19:54:00 +0000

Z http://windowsitpro.com/articles/index.cfm?articleid=81612 :

Używając tylko standardowych komend, oskryptowałem LwrCase.bat i LwrCase\Folder.bat, aby zmienić nazwę pliku na małe litery, lub zmienić wszystkie nazwy plików w folderze na małe litery.

Aby zmienić nazwę pliku na małe litery, użyj:

[call] LwrCase FullyQualifiedFileName

Gdzie FullyQualifiedFileName jest w pełni kwalifikowaną nazwą pliku, której nazwa ma być zmieniona.

Aby zmienić nazwy wszystkich plików w katalogu, użyj:

[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]

gdzie FullyQualifiedDirectoryName jest w pełni kwalifikowaną ścieżką do katalogu, a /S jest opcjonalnym parametrem, który zmieni również nazwy plików we wszystkich podkatalogach.

UWAGA: LwrCase.bat wykorzystuje przełącznik /L polecenia DIR, który zwraca nazwy pisane małymi literami.

LwrCase.bat zawiera:

@echo off
if {%1}=={} @echo Syntax: LwrCase FullyQualifiedFileName&goto :EOF
if not exist %1 @echo LwrCase - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
 set file=%%a
)
if /i "%file:~0,1%" EQU "d" @echo LwrCase - %1 is NOT a file.&endlocal&goto :EOF
for /f "Tokens=*" %%f in ('dir %1 /L /b /a /a-d') do (
 Rename %1 "%%f"
)
endlocal

LwrCase.bat zawiera:

@echo off
if {%1}=={} @echo Syntax: LwrCase_Folder FullyQualifiedDirectoryName&goto :EOF
if not exist %1 @echo LwrCase_Folder - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
 set folder=%%a
)
if /i "%folder:~0,1%" NEQ "d" @echo LwrCase_Folder - %1 is NOT a folder.&endlocal&goto :EOF
pushd %1
set sw=/B /A /A-D
if /i {%2}=={/S} set sw=%sw% %2
for /f "Tokens=*" %%f in ('dir %sw%') do (
 call LwrCase "%%f"
)
popd
endlocal
1
1
1
2017-05-30 15:01:22 +0000

Zaakceptowana odpowiedź ](https://superuser.com/q/65302/150988#412413) na to pytanie, autorstwa loftysnake , działa dla bieżącego katalogu, ale nie przeszukuje podkatalogów. &nbsp Sawny zasugerował prostą modyfikację odpowiedzi loftysnake'a , aby była rekurencyjna, ale to nie działa, ponieważ, podczas gdy polecenie rename pozwala na określenie napędu i ścieżki z nazwą pliku1 (źródłowego), nazwa pliku2 (docelowego) musi być tylko nazwą pliku.  Cytując komunikat pomocy (/?),

… nie możesz określić nowego napędu lub ścieżki dla pliku docelowego.

Ale move działa tam, gdzie rename nie działa, więc możesz rekursywnie zmieniać nazwy plików na małe litery za pomocą tego polecenia:

for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (move /y "%f" "%f")

ponieważ okazuje się, że Move radzi sobie ze ścieżkami do katalogów.

Powyższe polecenie działa po wpisaniu bezpośrednio w Wierszu poleceń (CMD.EXE).  Jeśli chcesz to zrobić z poziomu pliku wsadowego (.BAT), musisz podwoić znaki %:

for /f "Tokens=*" %%f in ('dir /l/b/a-d/s') do (move /y "%%f" "%%f")

I prawdopodobnie możesz pominąć nawiasy i /y i powiedzieć po prostu do move ….

0
0
0
2014-11-06 00:08:21 +0000

Rozwiązanie rekursywne. Umieść to w pliku recursiverename.cmd…

for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
for /r /d %%x in (*) do (
    pushd "%%x"
    for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
    popd
)
0
0
0
2016-03-30 10:50:39 +0000

Powershell

Przejdź do katalogu i uruchom:

dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }

Zweryfikowałem, że to działa. Znalezione tutaj: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx