2009-06-22 10 views
12

Mam wiele plików bez rozszerzenia. Chcę napisać skrypt wsadowy okien, które będą:Znajdź i zmień nazwy plików bez rozszerzenia?

  1. znaleźć pliki bez rozszerzenia (w określonym folderze)
  2. Dodaj .bla na końcu nazwy pliku

jestem taki skrypt noobu wsadowego Windows, nie wiem nawet, od czego zacząć. Propozycje?

Odpowiedz

25

dla Windows plików wsadowych, to będą zmieniać nazwy tylko pliki bez rozszerzenia do przedłużenia .bla:

rename *. *.bla 

Wskazówka pierwszym argumentem jest gwiazdą i kropka: *.

Drugi argument to: * .bla

Kropka początek kombinacja reprezentuje pliki bez rozszerzeń w tym kontekście (. *).

Przed:

06/21/2009 11:57 PM     6 test 
06/21/2009 11:57 PM     7 test.exe 
06/21/2009 11:57 PM     7 test2 

Po:

06/21/2009 11:57 PM     6 test.bla 
06/21/2009 11:57 PM     7 test.exe 
06/21/2009 11:57 PM     7 test2.bla 

dodatkowe Uwaga: Przeciwieństwem poleceń by zmienić nazwy wszystkich plików .bla się bez plików rozszerzeń.

EDIT:

Dla rekurencyjnie zmiany nazw plików bez rozszerzenia całej podkatalogów (nie obsługuje spacji w ścieżkach):

@echo off 
FOR /F %%i in ('dir /b/s/A-d') DO (
    if "%%~xi" == "" rename "%%~fi" "%%~ni.bla" 
) 

EDIT2:

dla plików rekurencyjnie zmiana nazwy bez rozszerzenia w podkatalogach (obsługuje spacje w ścieżce):

@echo off 
for /f "tokens=* delims= " %%i in ('dir /b/s/A-d') DO (
    if "%%~xi" == "" rename "%%~fi" "%%~ni.bla" 
) 
+0

Rozważałem to, ale nie ma nawet kropki na końcu nazwy ... czy to nadal będzie działać? – Alan

+0

Ponadto, jak mam dołączyć podfoldery? – Alan

+0

@Alan - tak to zadziała, a ile podfolderów mówimy? – JFV

5

to zrobić w podkatalogów użyj:

for /f %a in ('dir /b /ad /s') do rename %a\*. *.bla 

jeśli używasz to w pliku wsadowym, trzeba podwoić '%'

for /f %%a in ('dir /b /ad /s') do rename %%a\*. *.bla 

edit:

Jeśli masz spacje w nazwach katalogów, możesz spróbować tego (wersja wsadowa):

for /f "tokens=* delims= " %%a in ('dir /b /ad /s') do rename "%%a\*." "*.bla" 
+0

fajnie! (15 char limit) –

+0

Drobny problem tutaj - nie działa dla katalogów ze spacjami ... inaczej wyglądają dobrze – Alan

6

Oto kolejna możliwość polecenia do zmiany nazw plików bez rozszerzeń rekurencyjnie (zakładając, że ścieżki plików nie zawierać spacji):

for /f %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla" 

wersja Batch (ze zdwojoną %):

@echo off 
for /f %%i in ('dir *. /b /s /a-d') do (
    rename "%%~fi" "%%~ni.bla" 
) 


Jeśli nazwy plików lub folderów zawierają spacje, należy użyć tego c ommand zamiast:

for /f "tokens=* delims= " %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla" 

wersja serii:

@echo off 
for /f "tokens=* delims= " %%i in ('dir *. /b /s /a-d') do (
    rename "%%~fi" "%%~ni.bla" 
) 

Edit: oto jeszcze jeden krótszy-liner, który obsługuje spacji w ścieżkach: Wersja

for /r %i in (*.) do ren "%~fi" "%~ni.bla" 

Batch:

@for /r %%i in (*.) do ren "%%~fi" "%%~ni.bla"