yamata Opublikowano 17 Marca 2011 Zgłoś Udostępnij Opublikowano 17 Marca 2011 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... 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
3oo Opublikowano 18 Marca 2011 Zgłoś Udostępnij Opublikowano 18 Marca 2011 (edytowane) 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 offset 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 18 Marca 2011 przez 3oo Odnośnik do komentarza
yamata Opublikowano 18 Marca 2011 Autor Zgłoś Udostępnij Opublikowano 18 Marca 2011 Yeah! Albo, jak powiedział niegdyś Marcinkiewicz: "Yes, Yes, Yes!" Dokładnie o to mi chodziło. Dzięki jak nie wiem co. Duży browar, niestety wirtualny... 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" 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... Tylko ja mam pecha... 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? Tak czy inaczej - jeszcze raz dzięki. Temat właściwie do zamknięcia. Amen. Odnośnik do komentarza
3oo Opublikowano 18 Marca 2011 Zgłoś Udostępnij Opublikowano 18 Marca 2011 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 offset 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 offsetlocal 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
yamata Opublikowano 19 Marca 2011 Autor Zgłoś Udostępnij Opublikowano 19 Marca 2011 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 z martwego już forum [szukaj] Liczyłem na konkretne odpowiedzi których nie uzyskałbym gdzie indziej. I nie zawiodłem się! 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! Odnośnik do komentarza
3oo Opublikowano 19 Marca 2011 Zgłoś Udostępnij Opublikowano 19 Marca 2011 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
Rekomendowane odpowiedzi