Toplu iş, dosyaları küçük harf olarak yeniden adlandırmak için bir yolu var mı?


63

Klasörlerdeki ve alt klasörlerdeki tüm dosyaları küçük harf olarak yeniden adlandırmanın bir yoluna ihtiyacım var.

Bunu sadece pencereleri kullanarak yapmanın bir yolu olup olmadığını bilmek istiyorum (XP veya 7)


Windows unix'te olduğu gibi küçük ve üst kapaklar arasında ayırım yapmaz. belki, eğer buna neden ihtiyaç duyduğunu söyleseydin, sorunu çözmede yardımcı olurdu.
Rook

1
@Idigas. Üzgünüz, ancak NTFS'den beri dosya adları büyük / küçük harf duyarlıydı. Bkz support.microsoft.com/kb/100625
DaveParillo

Harika. Kötü bir fikir al ve daha da yay. Birisi dosya ve şişman bir parmak hatası gönderdiğinde ne kadar destek kabusu, "Answers.dat" gönderir ve gelen işlem "yanıt.dat" ı bekler. Bu iki ismin 'farklı' sayılması için hiçbir sebep yok.
David

2
@David, örneğin Java aslında büyük / küçük harfe duyarlı dosya adları gerektirir. Bu, büyük küçük harf duyarlı olmayan dosya sistemlerinde çok fazla sorun yaratabilir.
Arjan

10
Bunun eski olduğunu biliyorum, ama burada bir yanılgıyı açıklığa kavuşturmak istedim. NTFS, büyük / küçük harf duyarlılığını desteklerken, Windows işletim sistemi farklılaşmaz!
geo

Yanıtlar:


122

Dizine gidin ve aşağıdaki komutu çalıştırın:

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

Birisi değiştirmek / geliştirmek istemeniz durumunda ortaya çıkan detay:

  • for /f - Her hat için
  • "Tokens=*" - Her öğeyi her satırda işleyin.
  • %f in (...)- %fHer öğe için değişken adınızdır.
  • dir - bir dizindeki her dosyayı ve alt dizini listeler.
  • /l- (dir parametresi) Küçük harf kullanır.
  • /b- (dir için parametre) Çıplak format kullanır, yalnızca dosya / dizin adlarını, boyutsuz, başlıksız kullanır.
  • /a-d- (dir parametre) Do not listelemek dizinleri . ( astandları attribute, -standları notve dstandları directory) .
  • rename "%f" "%f"- dosyayı, aslında dirkomut ve /lbirleşimin alt harfleri olan kendi adıyla yeniden adlandırın .

7
Özyinelemeli sürümü: for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")(dir / r ekledi).
Sawny

3
Bu sadece briliant
Shir Gans

4
Özyinelemeli sürümü benim için işe yaramadı - yeniden adlandırmak komutun geçersiz bir formatta olduğundan şikayet etti. / S'nin ikinci dosyanın mutlak bir yol olarak listelenmesine ve dosya adı genişletme (% ~ nxf) kullanılarak bana orijinal, büyük dosya adı verilmesine neden oldu. Sadece manuel özyinelemeyle sona erdi.
Dogmatix,

3
Bu çok güzel bir cevap; Bu noktada, hiçbir harici programa gerek yok, hoş ve küçük komut, toplu iş dosyası karmaşıklığına gerek yok.
Jeff Wilbert

2
Küçük harfleri büyük harfe değiştirmek için değiştirilebilir mi?
Chucky,

18

spacetornado Renamer , toplu olarak toplu dosyaları yeniden adlandıran bir Windows programıdır. Metin arayabilir ve değiştirebilir, belirli sayıda karakteri kaldırabilir, küçük, büyük veya İlk Harf Büyük harf olarak değiştirebilir ve her dosya adının başına veya sonuna metin ekleyebilir (ekleme / hazırlama)

görüntü tanımını buraya girin


1
Lütfen bana aşağı oy kullanma nedenini bildirin.
Joe

5
İnsanlar nadiren açıklıyorlar, ne yazık ki: /
Gnoupi

7
Sanırım, olumsuz yön, OP'nin herhangi bir ek yazılım olmadan çalışan bir çözüm istediği içindi. Ve sanırım aşağı oy açıklanmadı, çünkü bazı insanlar intikam aşağı oy kullanmaya yatkın.
sabah

GUI biraz korkak ama işi orada gördüğüm diğer bazı yeniden adlandırmalardan daha iyi yapıyor.
Kasım'da jcollum

1
Ne yaptığını yaptı, dosyaları Linux FTP sunucusundan temizlemek için özyinelemeli yeniden adlandırma gerektiğinde ... ancak düzgün çalışmadan önce Yönetici olarak çalıştırmam gerekti. Eski, korunmamış bir program gibi geliyor :)
Nelson

12

Windows 7'den beri bu görevler için PowerShell'i kullanabilirsiniz.

Get-ChildItem "C:\path\to\folder" -recurse | 
  Where {-Not $_.PSIsContainer} | 
  Rename-Item -NewName {$_.FullName.ToLower()}

- Kök klasörünüzü seçin
- kök klasörün ve alt klasörlerin içindeki tüm dosyalar yeniden adlandırılır
- klasör adları ile dışlanır Where {-Not $_.PSIsContainer} |


7

İşte gerçekten işe yarayan sadece yerel cmd.exe komutlarını kullanarak uygun bir özyinelemeli komut satırı çözümü. Bunun mümkün olan en basit yerel çözüm olduğuna inanıyorum:

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

Native cmd.exe komutlarının ötesine geçmeye istekli iseniz, başka bir seçenek de JREN.BAT normal ifade yeniden adlandırma yardımcı programı , adları büyük veya küçük harfe dönüştürme seçeneklerini destekleyen. Herhangi bir Windows makinesinde XP'den itibaren doğal olarak çalışan saf komut dosyasıdır (karma JScript / toplu iş) - 3. parti exe dosyaları gerekmez. Tüm belgelere yerleşik olarak - komut satırından jren /?veya jren /??disk belleği çıktısı almak istiyorsanız erişilir .

JREN ile özyinelemeli çözüm şu kadar basittir:

jren "^" "" /s /l

1
Harika çalışıyor. Bilginize /a-danahtarı kaldırın ve aynı zamanda klasör adlarını da küçük harf olacaktır.
Keith,

Bir toplu iş dosyası olarak kaydetmeye çalıştım ve sistem32'de açtım, böylece her zaman tek bir komutla çalıştırabilirim. Bunun sonuçları: " D"') was unexpected at this time.Doğrudan bir komut olarak çalıştırmak gayet iyi çalışıyor, sadece bir toplu iş dosyası olarak çalıştırıldığında çalışmaz. Bir toplu iş dosyası olarak nasıl çalışacağını bilmiyorum ama konuyu ele alacağımı düşündüm.
Don Cullen

1
@DonCullen - Bir toplu komut dosyasında FOR kullanılırken FOR değişken yüzdelerinin iki katına çıkarılması standart bir sözdizimidir. Yani %Ddeğiştirmek gerekir %%Dve %Fhiç %%Fbir toplu komut dosyası içinde komuta koyarsanız.
dbenham

Her zaman her gün yeni bir şey öğrenmek. Teşekkürler!
Don Cullen

6

Benim kişisel favori toplu dosya yeniden adlandırma programı Cylog's WildRename . Diğer birçok özellik arasında, dosya ismini değiştirebilir. WildRename ile ilgili en iyi şey, muhtemelen normal ifadeleri desteklemesidir!


BU 10 saniye içinde kurulumdan sonra, doğru uygulama. Tekrarlı olarak uzaktaki bir klasörü (kolaylık için eşlenmiş) yapılandırdım ve yeniden adlandırdım.
Matteo Conta

5

Kabul edilen cevabın "özyinelemeli" versiyonu (işe yarar *)

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"))


İlk döngü

for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"')

Geçerli içindeki tüm dizinlerin mutlak yollarının bir listesini alır (dahil):

C: \ Foo>

  • C: \ Foo \ TO.txt

  • C: \ Foo \ Bar \ LOWER.txt

  • C: \ Foo \ Bar \ Baz \ CASE.txt


İkinci döngü

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

İlk döngü tarafından bulunan mutlak yolların her birinin içindeki tüm dosya adlarının (veya anahtarı çıkarırsanız dosya ve dizin adlarının) bir listesini alır ve bu dosyaların adını küçük harfe dönüştürür./a-d

  • C: \ Foo \ TO.txt

  • C: \ Foo \ Bar \ LOWER.txt

  • C: \ Foo \ Bar \ Baz \ CASE.txt


* iki döngüye ihtiyaç duyar çünkü ikinci argüman renamebir dosya adı olmalı ve mutlak bir yol değil ( /sanahtar tarafından elde edilen ).


Neden cmd /c "echo %cd%& ilk sende var for? Tamamen gereksiz.
DavidPostill

@DavidPostill echo %cd%, geçerli klasörü mutlak yollar listesine eklemek için var ; ve cmd /cyapar &komutları birleştirmek için çalışmalara. Windows Toplu Komut Dosyası ile ilgili tam bir noob ; Daha iyi bir yol biliyorsanız, cevabı geliştirmek için çekinmeyin!
wc.matteo

Bir noob için mükemmel bir iş. Sizinki, bir ad boşluk veya noktalı virgül ile başladığında başarısız olan durum dışında, gerçekte çalışan ilk yerel cmd.exe komut satırı çözümüydü. Kabul edilen yanıt aynı sorunu yaşıyor. Önde gelen alan veya noktalı virgülle de çalışan daha basit bir cevap için cevabımı görün .
dbenham

Bu, daha düşük başlıklara dönüştürmek için yapılan değişiklikler olabilir mi?
Rishav

3

Bir "karakter değiştirme" stratejisini kullanabilirsin ...

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

... ve benzerleri, AZ harfleri için. Muhtemelen bir FOR döngüsü şeklinde uygulayabilirsiniz.



1

Gönderen http://windowsitpro.com/articles/index.cfm?articleid=81612 :

Yalnızca standart komutları kullanarak LwrCase.bat ve LwrCase_Folder.bat komut dosyalarını, küçük harfli dosya adını, küçük harfli dosya ismini değiştirmek veya bir klasördeki tüm dosya isimlerini küçük harf olarak yeniden adlandırdım.

Bir dosya adını küçük harf olarak yeniden adlandırmak için şunu kullanın:

[call] LwrCase FullyQualifiedFileName

FullyQualifiedFileName, yeniden adlandırılacak tam dosya adıdır.

Bir dizindeki tüm dosya adlarını yeniden adlandırmak için şunu kullanın:

[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]

FullyQualifiedDirectoryName, tam nitelikli klasör yoludur ve / S, tüm alt klasörlerdeki dosya adlarını da değiştirecek isteğe bağlı bir parametredir.

Not: LwrCase.bat, küçük harf adları döndüren DIR komutunun / L anahtarını kullanır.

LwrCase.bat içerir:

@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 şunları içerir:

@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

Bunu Windows'ta yapmak için en iyi program Toplu Yeniden Adlandırma Yardımcı Programıdır . Bu bir mans aracıdır. Regex'i, dosyaları ve / veya klasörleri yeniden adlandırmak için bile kullanabilirsiniz. Aynı zamanda kabuk entegrasyonuna sahiptir (bu yüzden explorerdan sağ tıklamayla çalıştırabilirsiniz) çok güzel. 64 bit ve 32 bit sürümleri mevcuttur.


1

Bu soruya kabul edilen cevap , loftysnake tarafından geçerli dizin için çalışır ancak alt klasörlerde arama yapmaz.  Sawny , loftysnake'in cevabını yinelemeli yapmak için cevabında basit bir değişiklik önerdi , ancak işe yaramadı çünkü renamekomut, dosya adı1 (kaynak) ile bir sürücü ve yol belirtmenize izin verirken , dosya adı2 (hedef) sadece bir dosya adı olmalıdır . Yardım ( /?) mesajını alıntılamak için ,

… Hedef dosyanız için yeni bir sürücü veya yol belirtemezsiniz.

Ancak moveçalışmadığı yerlerde rename, bu komutla tekrar tekrar küçük harfleri yeniden adlandırabilirsiniz:

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

çünkü bunun Movedizin yollarıyla baş edebileceği ortaya çıktı .

Yukarıdaki komut, doğrudan Komut İstemi'ne ( CMD.EXE) yazıldığında çalışır . Bunu bir batch ( .BAT) dosyasından yapmak istiyorsanız, %karakterleri iki katına çıkarmanız gerekir :

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

Muhtemelen parantezleri kaldırabilir /y ve sadece diyebilirsiniz do move ….


Başkalarının daha önce göndermiş olduğu bilgileri yeniden gönderecekseniz, orijinal yazarları tanımlayıp yazdıklarına bağlamanız gerekir.
Scott,

Üzgünüm, ama moveişe yaramadığı yerlere işaret ediyordum renameve sanırım moveburada komutun kullanılmasını öneren tek kişi benim . Ben sadece @loftysnake ve @sawny ın önerilerini aldım ve umarım onları bir çiş geliştirdim.
Adrian,

Bu tuhaf; Başka birinin bahsettiğini düşündüm move, ama şimdi bulamıyorum.
Scott,

0

Özyinelemeli çözüm. Bunu bir recursiverename.cmd dosyasına koyun.

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
)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.