Skrypt wsadowy, aby zmienić nazwę części nazwy pliku

1

Próbowałem stworzyć skrypt, który będzie miał nazwę pliku i zmienił tylko jedno słowo.

Przykładem może być:

projectname.vcproj.domainname.username.user

do

projectname.vcproj.otherdomainname.username.user

Próbowałem użyć pętli if, aby wyświetlić katalog i ustawić separator na okres, ale wydaje się, że nie jest w stanie go zidentyfikować i zmienić. Używam przykładów zmiany nazw plików .txt, ale nie wydaje się, aby działały jakieś sugestie?

Rubik'sCube
źródło

Odpowiedzi:

1

Chcesz użyć podstawienia łańcucha DOS.

C:\>set proj=projectname.vcproj.domainname.username.user
C:\>echo %proj%
projectname.vcproj.domainname.username.user

C:\>set proj=%proj:domainname=otherdomainname%
C:\>echo %proj%
projectname.vcproj.otherdomainname.username.user

Możesz uzyskać więcej pomysłów przeszukując strony internetowe pod kątem „manipulacji ciągiem DOS” i „DOS dla pętli”.

http://www.dostips.com/DtTipsStringManipulation.php#Snippets.Replace

joel
źródło
1
BTW - normalnie wybrałbym mniej masochistyczny język, taki jak python, perl lub nawet vbscript dla potrzeb manipulacji ciągiem.
joel
0

Nie jestem pewien, czy chcesz plik wsadowy do:

  1. Zmień nazwę 1 określonego pliku
  2. Zmień nazwę wszystkich plików w katalogu
  3. Zmień nazwy plików w katalogu, który pasuje do określonego wzorca
  4. Coś innego ?

Oto przykład pliku wsadowego, który należy wykonać w # 3 (Zmień nazwy plików w katalogu, który pasuje do określonego wzorca).

Uruchom plik wsadowy, aby upewnić się, że wyświetla listę wszystkich plików, których nazwę chcesz zmienić. Początkowo stare i nowe nazwy plików będą wyświetlane dla wszystkich znalezionych plików, ale nie zostaną zmienione nazwy plików. Może być konieczne zmodyfikowanie wartości searchpattern, aby wyświetlić żądane pliki. Po wyświetleniu poprawnych plików postępuj zgodnie z instrukcjami poniżej pliku wsadowego, aby zmienić nazwę.

@echo off

set "searchfor=domainname"
set "replacewith=otherdomainname"
set "searchpattern=*.%searchfor%.*"

for %%f in ("%searchpattern%") do call :work "%%~f"
set "searchfor="
set "replacewith="
set "searchpattern="
set "filematched="
set "filenewname="
goto :EOF


:work
set filematched=%~1

rem You can't do it directly like:
rem set "filenewname=%filematched:%searchfor%=%replacewith%%"

for /F "usebackq delims=" %%g in (`echo set "filenewname=%%filematched:%searchfor%=%replacewith%%%"`) do %%g
echo Renaming "%filematched%" to "%filenewname%"



rem delete the next line (goto :EOF) to make renaming active
goto :EOF



rem this line actually does the file renaming
ren "%filematched%" "%filenewname%"

goto :EOF

Uwaga: Aby zapobiec zmianie nazw niewłaściwych plików lub zmianie nazwy plików w niewłaściwy sposób, plik wsadowy wyświetli stare i nowe nazwy plików dla wszystkich znalezionych plików, ale nie zostaną zmienione nazwy plików.

Po uruchomieniu pliku wsadowego i upewnieniu się, że poprawne nazwy plików zostaną poprawnie zmienione, możesz edytować plik, aby usunąć opisane linie, aby zmienić nazwę, a następnie ponownie uruchomić plik wsadowy.

Aby to zrobić, znajdź dwie następujące linie:

rem delete the next line (goto :EOF) to make renaming active
goto :EOF

Następnie usuń linię, która mówi „goto: EOF” (lub usuń obie linie).

Nie usuwaj „goto: EOF” z żadnego innego miejsca w pliku wsadowym (można go znaleźć w kilku miejscach, więc usuń poprawne).

Jeśli potrzebujesz któregokolwiek z tych plików wsadowych wyjaśnionych ci lub jeśli nie robi tego, co naprawdę chcesz, daj mi znać.

Kevin Fegan
źródło
@ Rubik'sCube - Jak to działa dla Ciebie? Jeśli potrzebujesz modyfikacji kodu przykładowego, daj mi znać. Jeśli uważasz, że Twoje pytanie zostało udzielone, możesz kliknąć „Znacznik wyboru” obok odpowiedzi, którą uważasz za najlepszą, aby wszyscy wiedzieli, że pytanie zostało udzielone.
Kevin Fegan