Skocz do zawartości

Jak nazwać wsadowo foldery od plików w nich zawartych?


yamata

Rekomendowane odpowiedzi

Jak w temacie. Potrzebuję nazwać paręset katalogów, kopiując nazwę pierwszego pliku w nich zawartego. Jak sami rozumiecie - jest to wielce upierdliwe i chciałbym to zautomatyzować. Ewentualne różnice skoryguję sobie w Total Commanderze "narzędziem wielokrotnej zamiany". Ale jak zrobić taki myk - nie mam bladego pojęcia...

 

Coś takiego robi automatycznie dowolny paker, jeśli spakować pliki znajdujące się w folderze. Nadaje tworzonemu archiwum nazwę od katalogu. Ja potrzebuję odwrotnie... :D

 

Czyli łopatologicznie: katalog wabi się: QWERTY zawiera pliki AAA01, AAA02 etc.

Potrzebuję by katalog wabił się: AAA.

Bez używania opcji kopiuj-wklej...

 

Istnieje takie cudo? Jakaś wtyczka do TC? Czy funkcja której po prostu nie znam?

 

Jeśli jest na to jakieś prostackie rozwiązanie, to chyba się spalę ze wstydu... ;)

 

Z góry dzięki za odpowiedzi...

Odnośnik do komentarza
Pomoc jest darmowa, ale proszę rozważ przekazanie dotacji na utrzymanie serwisu: klik.

Temat chyba bardziej nadaje się na dział Konsola i Windows PowerShell. Możesz spróbować poniższym skryptem, ale on nie wytnie cyferek z nazwy pliku, nie działa rekurencyjnie i nie ma obsługi błędów (chociaż u mnie nie nadpisuje katalogów, gdy jego pierwszy plik ma taką samą nazwę jak jeden z istniejących/przetworzonych) - więc jeśli już, nie testuj na oryginałach.

 

Utwórz na dysku plik tekstowy w katalogu, w którym są katalogi do zmiany (nazwa dowolna).

Wklej treść skryptu, zapisz...

Zmień rozszerzenie pliku z txt na bat.

Uruchom dwuklikiem. (W razie potrzeby edycji skryptu PPM na nim > Edytuj).

 

@echo off

set myTest=%TMP%\chupacabra.tmp

 

for /f "tokens=*" %%G in ('dir .\ /a:d/b') do (

for /f "tokens=*" %%H in ('dir .\"%%G" /b') do (

if not exist %myTest% (

ren "%%G" "%%~nH"

echo. > %myTest%

)

)

del %myTest%

)

Edytowane przez 3oo
Odnośnik do komentarza

Yeah! Albo, jak powiedział niegdyś Marcinkiewicz: "Yes, Yes, Yes!" :cheer:

 

Dokładnie o to mi chodziło. Dzięki jak nie wiem co. Duży browar, niestety wirtualny... :P

 

Troszkę mnie zmyliła lokalizacja. Plik trzeba umieścić po sąsiedzku z katalogami, a nie w samym katalogu do zmiany.

Inaczej nie zadziała...

Oczywiście poleci po wszystkim co tam znajdzie - czyli właśnie wsadowo... ;)

Dlatego właśnie lepiej to zrobić w wydzielonym miejscu...

 

Było by całkiem super, gdyby w części katalogów na początku nie znajdował się plik "cover" :D

Co powoduje zmianę tylko pierwszego katalogu na "cover". Reszta pozostaje bez zmian, zgodnie z tym, co mówiłeś:

"chociaż u mnie nie nadpisuje katalogów, gdy jego pierwszy plik ma taką samą nazwę jak jeden z istniejących/przetworzonych"

Oczywiście żadna w tym twoja wina, skrypt działa doskonale... :thumbsup:

Tylko ja mam pecha... :D

 

Mam w związku z tym jeszcze jedno pytanie - jak zedytować ten skrypt, by nazywał katalogi nie od pierwszego, a na przykład 3-go? Oczywiście nie chcę być upierdliwy i nie musisz sobie sprawiać kłopotu - i tak mnie to urządza.

Ale gdybyś miał chwilę... ;)

 

Teraz go sobie wmontuję jako funkcję do Total Commandera na stałe. Nazwę ją "300". Albo "Chupacabra" ;)

To ostatnie to inspiracja Nową Fantastyką i artykułem o kryptozoologii, czy trzymasz taką w piwnicy? :D

 

Tak czy inaczej - jeszcze raz dzięki. Temat właściwie do zamknięcia. Amen.

Odnośnik do komentarza

Na zielono fragment, który niejako zabezpieczy przejście pierwszej pętli gdyby plik chupacabra.tmp istniał. Jego kasowanie i tworzenie steruje jednokrotną zmianą nazwy katalogu... Na czerwono warunek, który pominie cover (o ile będzie listowany jako pierwszy).

 

@echo off

set myTest=%TMP%\chupacabra.tmp

 

if exist %myTest% (

del %myTest%

)

for /f "tokens=*" %%G in ('dir .\ /a:d/b') do (

for /f "tokens=*" %%H in ('dir .\"%%G" /b') do (

if not exist %myTest% (

if %%~nH neq cover (

ren "%%G" "%%~nH"

echo. > %myTest%

)

)

)

del %myTest%

)

Poniższa wersja umożliwia zdefiniowanie numeru (z listingu) pliku do zmiany. x powinno byc równe 0. y możesz zmienić na dowolną cyferkę tj. zamiast

y=%1

wpisać np.

y=2

Zapis y=%1 umożliwia podanie parametru z linii poleceń (musi być podany z linii poleceń!, i jest to pierwszy parametr wiersza poleceń), tj. np.

Start > Uruchom...

Przeszukujesz ścieżkę do skryptu, a na końcu dodajesz spację i wpisujesz interesującą Cię cyferkę, np.

"[literka dysku]:\ścieżka\do\sk ry pt u\nazwa_skryptu.bat" 3

Skrypt:

@echo off

setlocal EnableDelayedExpansion

set x=0

set y=%1

for /f "tokens=*" %%G in ('dir .\ /a:d/b') do (

echo [!x!] & set /a x=0

for /f "tokens=*" %%H in ('dir .\"%%G" /b') do (

echo [!x!] & set /a x+=1

if /i !x! == %y% ren "%%G" "%%~nH"

)

)

Analogicznie możesz dodać jako drugi parametr ścieżkę do katalogu, który ma być przetwarzony. Czerwony fragment drugiego skryptu zmieniasz na "%2". Cudzysłów na wypadek, gdyby w ścieżce występowały spacje. Na końcu drugiego parametru obowiązkowo \ - i przykład:

"[literka dysku]:\ścieżka\do\sk ry pt u\nazwa_skryptu.bat" 3 "[literka_dysku]:\ścieżka\do\przetwarzanego\ka ta lo gu\"

Oczywiście zamiast Start > Uruchom... możesz to wywołanie zapisać i uruchomić w innym skrypcie bat.

 

BTW

chupacabra to chyba pozostałość po fascynacji Z archiwum X... ;) Kiedyś pisali o "tym" na onecie, a nawet niedawno powtarzali...

Odnośnik do komentarza

Nie będę pisał tekstów w rodzaju: "jesteś moim bogiem", bo w moim wieku to nie przystoi, a i niektórym na główkę szkodzi... ;)

Za to ponownie napiszę DZIĘKI.

Zyskałem najmniej dzień czasu, na zautomatyzowaniu upierdliwej operacji kopiuj-wklej.

 

Dlatego właśnie założyłem konto na tym forum, przywiedziony tu żalem za Picasso :D z martwego już forum [szukaj]

Liczyłem na konkretne odpowiedzi których nie uzyskałbym gdzie indziej. I nie zawiodłem się! :cheer:

 

A durnych portali na których jedyną poradą którą można znaleźć jest: "na pewno masz wirusa - reinstaluj system" jest coraz więcej i to nie tylko w dziedzinie komputerów. Coraz więcej pierdół, coraz mniej konkretów. Syf wszechogarniający i dzieci neostrady...

Na szczęście są jeszcze takie perełki jak fixitpc.

I tak trzymać.

 

Także dzięki tobie. Pozdrawiam i piję twoje zdrowie! :thumbsup:

Odnośnik do komentarza

Jeszcze tak a propo %2... Zapomiałem o tym, że musiałbyś w poleceniu ren wprowadzić także stosowne zmiany, bo inaczej polecenie to będzie próbowało zmieniać nazwy katalogów nie tam gdzie trzeba, a dokładniej tam gdzie znajduje się skrypt lub skąd został on wywołany (chyba).

Przeżyłeś spotkanie z chupacabrą... Pozdrawiam. :)

Odnośnik do komentarza
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...