Plik wsadowy zastępujący „.” Za pomocą „-”

0

Muszę zachować rozszerzenia plików i pracować z podfolderami.

Na przykład: „File.name.ext” powinno stać się „File-name.ext”

Jestem całkowicie nieświadomy co do skryptu powłoki, więc proszę o szczegółową odpowiedź. Nie mam pojęcia, co oznaczają przełączniki, ani nawet jak określić ścieżkę do tego celu.

Brandon Ogle
źródło
2
Chcesz, aby nazwa pliku „tekst” stała się „nazwą pliku-ext” (tzn. Plik nie ma teraz rozszerzenia)? Czy masz pliki takie jak „File.name.ext”, które powinny stać się „File-name.ext”?
Karan
Jest tu kilka dobrych odpowiedzi, ale zobacz także techsupportalert.com/best-free-rename-utility.htm Aplikacje Ifor (bezpłatne), które są zaprojektowane do tego rodzaju zadań
Mawg
@Karan Mam „File.name.ext”, który powinien stać się „File-name.ext”
Brandon Ogle

Odpowiedzi:

1

Całkowicie zgadzam się z drugą odpowiedzią. Byłoby to narzędzie do zmiany nazw masowych GUI więc znacznie łatwiejszy w użyciu. Jednak dla zabawy napisałem następujący plik wsadowy, który powinien rekursywnie zmieniać wszystkie pliki w bieżącym katalogu. i podkatalogi. i zastąp. z - (na przykład „ Długi plik. .name.ext " stanie się " Long -file--name.ext „):

@echo off
setlocal enabledelayedexpansion
for /r %%f in (*.*) do (
    set fn=%%~nf

    REM Remove the echo from the following line to perform the actual renaming!
    if not [!fn!]==[] if not ["%%~nxf"]==["!fn:.=-!%%~xf"] echo ren "%%~f" "!fn:.=-!%%~xf"
)
pause

Uruchom plik wsadowy raz, a jeśli wynik wydaje się zadowalający, wykonaj rzeczywistą zmianę nazwy, usuwając słowo echo (druga instancja, nie z pierwszej linii) i ponowne uruchomienie pliku.

Karan
źródło
To nie działa w przypadku plików z tylko rozszerzeniem .htaccess
Synetech
@Synetech: Ponieważ taki plik (pusta nazwa pliku, tylko rozszerzenie) powinien zostać pominięty, właśnie dodałem dodatkowy warunek. Powinien działać teraz, dzięki za haczyk!
Karan
tak jak poniższy kod nie działa, po prostu kopiuję go do notatnika i zapisuję jako plik wsadowy, a następnie wrzucam do katalogu nadrzędnego. Kiedy patrzę na wiersz poleceń, gdy jego uruchamianie nie wydaje się zmieniać nazwy. Również okno zamyka się po wykonaniu i nie otrzymuję końcowego okna wyjściowego
Brandon Ogle
Okno zamyka się po wykonaniu, ponieważ bezpośrednio uruchamiasz plik wsadowy z Eksploratora, a nie z wiersza polecenia. Jeśli chcesz, możesz dodać dodatkową linijkę pauza na końcu, aby okno pozostało otwarte (właściwie właśnie dodałem je powyżej), lub uruchom plik wsadowy z wiersza polecenia po zmianie na katalog. Również dla twojego bezpieczeństwa domyślnie wyłączyłem zmianę nazwy. Wspomniałem o tym w odpowiedzi powyżej, jeśli wynik jest zadowalający, usunąć Echo przed ren i uruchom ponownie, aby zmienić nazwę .
Karan
1
BTW, Synetech wspomniał powyżej o Bulk Rename Command. Możesz także użyć ReNamer aby skonfigurować złożone reguły zmiany nazw i / lub skrypty, używając prostego GUI wywołaj zapisane ustawienia wstępne za pomocą linii poleceń .
Karan
0

W jakiś sposób nie rozumiem, dlaczego w takim razie chcesz zawracać sobie głowę plikiem wsadowym. Dlaczego nie skorzystasz z jednego z bazillionowych narzędzi do zmiany nazw GUI, takich jak:

http://www.beroux.com/english/softwares/renameit/

Jeśli ten konkretny nie unosi twojej łodzi, sprawdź tę paradę:

http://www.techsupportalert.com/best-free-rename-utility.htm

TheUser1024
źródło
Mam aplikację, która codziennie pobiera tysiące notowań giełdowych i formatuje różne akcje klasy z okresem. Używam jednak innej aplikacji do opracowania strategii handlowej i jest ona niezgodna z okresami w nazwach plików. Mogę skonfigurować mój program do pobierania danych, aby po zakończeniu wykonać skrypt wsadowy, aby naprawić błąd nazewnictwa plików. Dlatego też, na początku uzyskanie skryptu roboczego pozwoli mi zaoszczędzić czas na codzienne korzystanie z aplikacji GUI do wykonania zadania.
Brandon Ogle
Ok, w połowie twojego komentarza mam powód, dla którego chciałeś partii. :-) Myślę, że idealnym sposobem byłoby poprosić o automatyczny lub planowalny sposób. nie musisz robić tego w trybie wsadowym, możesz używać różnych języków lub tych narzędzi wiersza poleceń, o których mówił Synetec. Ale myślę, że masz więcej niż jedną realną odpowiedź, więc wszystko jest w porządku. :-)
TheUser1024
0

Oto moja ostateczna, przetestowana wersja pliku wsadowego, która może robić to, co chcesz. Działa z plikami z lub bez nazw plików lub rozszerzeń, jednak pliki z nazwami zawierającymi % lub ! będzie powodować problemy .

Używa rozszerzenia opóźnionego, więc musisz uruchomić go z wiersza polecenia z opóźnionym rozszerzeniem (po prostu uruchom setlocal /enabledelayedexpansion nie rozetnie go, ponieważ tylko to włącza jeśli jest już włączony ; nie działa, jeśli nie jest włączony, gdy uruchamiany jest wiersz polecenia).

Możesz włączyć rozszerzenie opóźnione, otwierając wiersz polecenia za pomocą /V:ON przełącznik, ale możesz to również zrobić z istniejącego wiersza polecenia, jak w pliku wsadowym poniżej.

@echo off

:: This batch file (prints the command to) rename files so that
:: any dots (.) are replaced with dashes (-)
::
:: Note, files with names containing percents (%) and exclamantions (!)
:: will intefere with command-prompt syntax and are not supported, but
:: can be worked around: https://stackoverflow.com/questions/5226793/

:: If this batch-file has no parameters...
if [%1]==[] (
    :: Open a new command-prompt with delayed-expansion enabled and call self
    cmd /v:on /c "%0" +
    :: Quit
    goto :eof
)

:: Recurse through all files in all subdirectories
for /r %%i in (*) do (

    rem (:: cannot be used for comments in a FOR loop)
    rem Check if it has an extension
    if [%%~xi]==[] (
        rem If it has an extension, preserve it
        set RENFN=%%~nxi
    ) else (
        rem Copy the path (and filename)
        set RENFN=%%~ni
        rem Check if it has a filename
        if not [%%~ni]==[] (
            rem If it has a filename, replace dots with dashes
            set RENFN=!RENFN:.=-!
        )
    )

    rem Rename original file
    ren "%%i" "!RENFN!%%~xi"

)

:: Exit spawned shell (no need to use setlocal to wipe out the envvar)
exit

:: Test output:
::
:: C:\t> dir /b/a
::
:: .txt
:: blah
:: file.blah.txt
:: foo.bar.txt
:: super duper. .blah.ttt. omergerd.---.mp4
:: t.bat
::
:: C:\t> t.bat
::
:: ren "C:\t\.txt" ".txt"
:: ren "C:\t\blah" "blah"
:: ren "C:\t\file.blah.txt" "file-blah.txt"
:: ren "C:\t\foo.bar.txt" "foo-bar.txt"
:: ren "C:\t\super duper. .blah.ttt. omergerd.---.mp4" "super duper- -blah-ttt- omergerd----.mp4"
:: ren "C:\t\t.bat" "t.bat"
Synetech
źródło
lol w omergerd. Ale to chyba nie działa, po prostu kopiuję to do notatnika i zapisuję jako plik wsadowy, a następnie wrzucam do katalogu nadrzędnego. Kiedy patrzę na wiersz poleceń, gdy jego uruchamianie nie wydaje się zmieniać nazwy. Również okno zamyka się po wykonaniu i nie otrzymuję końcowego okna wyjściowego
Brandon Ogle
Nie, nie zmienia nazwy bez powodu echo dowództwo. Zawsze używam echo przed moimi poleceniami podczas pisania pliku wsadowego, aby zobaczyć wyniki bez wprowadzania zmian. W ten sposób mogę przetestować i rozwinąć plik wsadowy bez szkody. Najwyraźniej Karan robi to samo. ☺ Usunąłem echos.
Synetech
Na marginesie, jeśli nie jesteś zaznajomiony z programowaniem wsadowym, to dlaczego używasz go do zmiany nazwy? Dlaczego nie użyć programu GUI? polecam WildRename ponieważ jest potężny, ale łatwy w użyciu - i bezpłatny.
Synetech
Mam aplikację, która codziennie pobiera tysiące notowań giełdowych i formatuje różne akcje klasy z okresem. Używam jednak innej aplikacji do opracowania strategii handlowej i jest ona niezgodna z okresami w nazwach plików. Mogę skonfigurować mój program do pobierania danych, aby po zakończeniu wykonać skrypt wsadowy, aby naprawić błąd nazewnictwa plików. Dlatego też, na początku uzyskanie skryptu roboczego pozwoli mi zaoszczędzić czas na codzienne korzystanie z aplikacji GUI do wykonania zadania.
Brandon Ogle
1
Ach, to ma sens. Wtedy tak, skryptowanie zautomatyzowanego rozwiązania jest dobre (choć jestem pewien, że istnieją zaawansowane narzędzia do zmiany nazw, które można uruchamiać z linii poleceń, jak Polecenie masowej zmiany nazwy ).
Synetech