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!


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.


Świetny scenariusz, simlev .. Dzięki bardzo .. zagrasz z nim!
— narrator dru
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.