Partia zmienia nazwy plików, zachowuje ext?

1

(Win10) W pliku wsadowym, jak rekurencyjnie zmieniać nazwy plików nazwy w folderze? Nie rozszerzenie .

na przykład

Pliki do zmiany nazwy: heavy.doc, bright.jpg, fast.docx, quiet.png itp

Zmień nazwę na: A1. *, A2. *, A3. *, A4. *, Itd. (Gdzie. * Zachowuje oryginalny ext)

Staje się: A1.doc, A2.jpg, A3.docx, A4.png itp

Dzięki!

narrator dru
źródło
Widzieć to przydatne pytanie i to jak. Czy musisz to zrobić jako część skryptu? Dlaczego nie użyć samodzielnego programu do zmiany nazwy?
simlev
Pierwszy dołącza ciąg znaków do nazwy pliku. Ciekawe, ale nie to, czego chciałem. Drugi wykonuje zadanie ładnie, choć z nawiasami. Co do konieczności zrobienia tego w skrypcie wsadowym, byłoby miło mieć rozwiązanie, które mogę używać regularnie, i uwielbiam uczyć się nowych sposobów korzystania z takich skryptów. Twoje zdrowie!
narrator dru

Odpowiedzi:

1

Po szybkim spojrzeniu na stronę referencyjną dla , Mógłbym to wymyślić:

@echo off & setlocal EnableDelayedExpansion 
set a=1
for /f "tokens=1,2 delims=." %%G in ('dir /b /s /A:-D') do (
    ren "%%G.%%H" "A!a!.%%H" 
    set /a a+=1
)

Aktualizacja: lepiej byłoby przekazać folder początkowy jako parametr, aby sam skrypt mógł zostać umieszczony w dowolnym miejscu i nie ryzykował zmiany nazwy.

@echo off & setlocal EnableDelayedExpansion 
set a=1
for /f "tokens=1,2 delims=." %%G in ('dir /b /s /A:-D %1') do (
    ren "%%G.%%H" "A!a!.%%H" 
    set /a a+=1
)

Wyjaśnienie:

@echo off dzięki temu unika się każdego polecenia zapisywanego na konsoli.

setlocal EnableDelayedExpansion jest to potrzebne, aby a zmienna, aby faktycznie zwiększyć.

set a=1 tworzymy zmienną licznika o nazwie a i ustaw jego wartość początkową na 1.

for /f pętla na liście nazw plików.

tokens=1,2 delims=. nazwa pliku zostanie podzielona, ​​gdy a . napotkany. Interesują nas dwa pierwsze żetony wynikające z tej operacji. Uwaga: oczekuje się, że nazwy plików będą nie zawierają kropkę, z wyjątkiem basename i rozszerzenia.

%%G to nazwa pierwszego tokena (domyślnie jest to drugi) %%H ).

in ('dir /b /s /A:-D %1') zapętlić wyniki dir polecenie, które wyświetla listę plików w katalogu przekazanym jako parametr %1 z następującymi opcjami: /b czyste wyjście, /s uwzględnij wyniki z podkatalogów, /A:-D wyświetlaj tylko pliki, a nie nazwy folderów.

ren "%%G.%%H" "A!a!.%%H" zmień nazwę pliku ( %%G.%%H odtwarza oryginalną nazwę pliku) na stałą A plus zmienna a bieżąca wartość plus oryginalne rozszerzenie %%H.

set /a a+=1 zwiększa zmienną licznika.

simlev
źródło
Świetny scenariusz, simlev .. Dzięki bardzo .. zagrasz z nim!
narrator dru