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

Is er een manier om bestanden te hernoemen naar kleine letters?

Ik heb een manier nodig om alle bestanden in mappen en submappen te hernoemen naar kleine letters.

Ik zou graag willen weten of er een manier is om dat te doen met alleen_ windows (XP of 7)

Antwoorden (13)

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

Ga naar de directory en voer het volgende commando uit:

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

Hier is de uitsplitsing voor het geval iemand iets wil wijzigen/verbeteren :

  • for /f - Voor elke regel
  • "Tokens=*" - Verwerk elk item in elke regel.
  • %f in (...) - %f is je variabele naam voor elk item.
  • dir - lijst elk bestand en subdirectory in een directory.
  • /l - (parameter voor dir) Gebruikt kleine letters.
  • /b - (parameter voor dir) Gebruikt kaal formaat, alleen de bestands-/mapnamen, geen grootte, geen headers.
  • /a-d - (parameter voor dir) Maakt geen lijst van directories. (a staat voor attribute, - staat voor not en d staat voor directory).
  • rename "%f" "%f"- hernoem het bestand met zijn eigen naam, die in feite wordt verlaagd door de combinatie van het commando dir en /l.
18
18
18
2009-11-04 00:26:39 +0000

spacetornado Renamer ](http://www.spacetornado.com/Renamer/) is een Windows programma dat grote hoeveelheden bestanden in batches hernoemt. Je kunt tekst zoeken en vervangen, een bepaald aantal tekens verwijderen, de hoofdletter veranderen in kleine letters, hoofdletters of hoofdletters, en tekst toevoegen aan het begin of eind (append/prepend) van elke bestandsnaam

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

Sinds Windows 7 zou je PowerShell voor die taken kunnen gebruiken

Get-ChildItem "C:\path\to\folder" -recurse | 
  Where {-Not $_.PSIsContainer} | 
  Rename-Item -NewName {$_.FullName.ToLower()}
  • Kies je hoofdmap
  • alle files in hoofdmap en submappen worden hernoemd
  • mapnamen worden uitgesloten met Where {-Not $_.PSIsContainer} |
9
9
9
2016-07-21 22:07:04 +0000

Hier is een goede recursieve commandoregel oplossing met alleen native cmd.exe commando’s die ook echt werkt. Ik geloof dat het de eenvoudigst mogelijke native oplossing is:

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

Als je bereid bent om verder te gaan dan native cmd.exe commando’s, dan is een andere optie mijn JREN.BAT regular expression renaming utility die opties ondersteunt om namen om te zetten in hoofdletters of kleine letters. Het is een puur script (hybride JScript/batch) dat draait op elke Windows machine vanaf XP - geen 3rd party exe bestanden nodig. Volledige documentatie is ingebouwd - toegankelijk vanaf de opdrachtregel via jren /?, of jren /?? als u gepagineerde uitvoer wilt.

Met JREN is de recursieve oplossing zo simpel als:

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

Mijn persoonlijke favoriete batch-hulpprogramma voor het hernoemen van bestanden is Cylog’s WildRename . Naast vele andere functies, kan het de hoofdletters van bestandsnamen veranderen. Het beste van WildRename is waarschijnlijk dat het reguliere expressies ondersteunt!

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

“Recursieve” versie van het geaccepteerde antwoord (dat werkt)

  • *

De eerste lus

Haalt een lijst met de absolute paden van alle mappen binnen de huidige (inclusief deze):

C:\Foo>

  • C:\Foo \TO. txt

  • C:\FooBar \LOWER. txt

  • C:\FooBar\Baz \CASE. txt


De tweede lus

Krijgt een lijst van alle bestandsnamen (of bestands en map namen als je de 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")) switch weglaat) binnen elk van de absolute paden gevonden door de eerste lus, en converteert de naam van deze bestanden naar kleine letters.

  • C:\Foo TO.txt

  • C:\FooBar LOWER.txt

  • C:\FooBar Baz **CASE. txt

* er zijn twee lussen nodig omdat het tweede argument voor for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"') een bestandsnaam moet zijn en niet een absoluut pad (zoals die verkregen wordt met de for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g") switch).

3
3
3
2013-04-07 17:06:17 +0000

Je zou een “karakter vervanging” strategie kunnen gebruiken…

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

…en zo verder, voor letters A-Z. Je zou het waarschijnlijk kunnen implementeren in de vorm van een FOR lus.

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

Het beste programma om dit in Windows te doen is Bulk Rename Utility . Het is een mans programma. Je kunt zelfs regex gebruiken om bestanden en/of mappen te hernoemen. Het heeft ook shell integratie (zodat je het vanuit de verkenner met een rechtsklik kunt uitvoeren) wat erg prettig is. 64 bit en 32 bit versies beschikbaar.

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

http://www.dostips.com/DtCodeCmdLib.php#Function.toLower geeft een eenvoudige functie die je zou moeten kunnen opnemen en aanroepen vanuit een batch-bestand.

Laat het batchbestand dus de mappen/filenamen itereren, en roep deze functie op om de kleine letters van de naam te genereren.

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

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

Met alleen standaardcommando’s heb ik LwrCase.bat en LwrCase_Folder.bat gescript, om een bestandsnaam te hernoemen naar kleine letters, of om alle bestandsnamen in een map te hernoemen naar kleine letters.

Om een bestandsnaam te hernoemen naar kleine letters, gebruikt u:

[call] LwrCase FullyQualifiedFileName

Waarbij FullyQualifiedFileName de volledig gekwalificeerde bestandsnaam is die hernoemd moet worden.

Om alle bestandsnamen in een map te hernoemen, gebruik je:

[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]

waarbij FullyQualifiedDirectoryName het volledig gekwalificeerde mappad is, en /S een optionele parameter die ook de bestandsnamen in alle submappen hernoemt.

OPMERKING: LwrCase.bat maakt gebruik van de /L-schakelaar van het DIR-commando, waarmee namen in kleine letters worden teruggegeven.

LwrCase.bat bevat:

@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_Folder.bat bevat:

@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

Het geaccepteerde antwoord ](https://superuser.com/q/65302/150988#412413) op deze vraag, van loftysnake , werkt voor de huidige map maar zoekt niet in submappen. Sawny ](https://superuser.com/users/111981/sawny) suggereerde een eenvoudige wijziging van loftysnake’s antwoord om het recursief te maken, maar het werkt niet, omdat, terwijl het rename commando u toestaat een station en pad op te geven met bestandsnaam1 (de bron), bestandsnaam2 (de bestemming) alleen een bestandsnaam moet zijn.  Om de help (/?) boodschap te citeren,

… u kunt geen nieuw station of pad opgeven voor uw doelbestand.

Maar move werkt waar rename dat niet doet, dus je kunt bestanden recursief hernoemen naar kleine letters met dit commando:

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

want het blijkt dat Move wel overweg kan met directory-paden.

Bovenstaand commando werkt wanneer het rechtstreeks in de opdrachtprompt (CMD.EXE) wordt getypt.  Als u dit vanuit een batchbestand (.BAT) wilt doen, moet u de % tekens verdubbelen:

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

En je kunt waarschijnlijk de haakjes en de /y weglaten en gewoon do move … zeggen.

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

Recursieve oplossing. Zet dit in een recursiverename.cmd bestand…

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

Navigeer naar de dir en voer uit:

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

Ik heb geverifieerd dat dit werkt. Hier gevonden: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx