[CMD/BATCH] Problem z sortowaniem


(Przybysz Przybyszenko) #1

Witam. Mam nastepujacy problem: probuje stworzyc batch'a ktory posoruje mi wszystkie pliki *.txt w konkretnej lokalizacji i jej podfolderach.

wyglada to mniej wiecej tak: C:\folder_1\a.txt,b.txt,c.txt...n.txt ; C:\folder_1\folder_2\a.txt,b.txt,c.txt...n.txt

Chcialbym te pliki posortowac i rezultat sortowania zapisac w jednym pliku tekstowym np. 'posortowane.txt'.

Napisalem takiego batch'a:

@echo off

cd C:\A

dir /B /S *.txt>>C:\A\do_posortowania.txt

for /F "tokens=*" %%a in (do_posortowania.txt) do Sort "%%a" /o Posortowane.txt

cls

echo Sorotwanie zakonczone pomyslnie.

pause

exit

Program w swoim zalozeniu mial: Stworzyc liste plikow tekstowych (to mu sie udaje najlepiej :D), "wyjmowac" z tej listy po jednym pliku, sortowac, zapisywac do pliku wyjsciowego po czym brac nastepny plik z listy, i tak do jej konca.

Jednak program dostaje szajby przy petli.

wywala mniej wiecej cos takiego:

C:\A>for /F "tokens=*" %a in (do_posortowania.txt) do Sort "%a" /o Posortowane.txt

C:\A>Sort "C:\A\do_posortowania.txt" /o Posortowane.txt

C:\A>for /F "tokens=*" %a in (do_posortowania.txt) do Sort "%a" /o Posortowane.txt

C:\A>Sort "C:\A\do_posortowania.txt" /o Posortowane.txt

C:\A>for /F "tokens=*" %a in (do_posortowania.txt) do Sort "%a" /o Posortowane.txt

C:\A>Sort "C:\A\do_posortowania.txt" /o Posortowane.txt

C:\A>for /F "tokens=*" %a in (do_posortowania.txt) do Sort "%a" /o Posortowane.txt

C:\A>Sort "C:\A\do_posortowania.txt" /o Posortowane.txt

C:\A>for /F "tokens=*" %a in (do_posortowania.txt) do Sort "%a" /o Posortowane.txt

i tak w nieskonczonosc. ;| Co pochrzanilem? czy moze zle podchodze do problemu? z gory dziekuje za wszelka pomoc.


(Hindol) #2

dir ma w sobie opcję sortowania :smiley:

/O Wyświetla listę plików w określonym porządku.

  sortowanie N Wg nazw (alfabetycznie) S Wg rozmiarów (od najmniejszych)

              E Wg rozszerzeń (alfabet.) D Wg dat i godzin (od najstarszych)

              G Katalogi na początku - Odwrócenie kolejności

dir /OGN

daje najlepsze wyniki


([alex]) #3

Po pierwsze coś tu nie kumam, otóż jak wynik sortowania zapisujesz do tego samego pliku to wynik sortowania dostaniesz tylko z ostatniego pliku, następujące polecenie zrobi dokładnie to samo.

for %%a in (*.txt) do Sort "%%a" /o Posortowane.txt

(Przybysz Przybyszenko) #4

Nie do konca sie jasno wyrazilem. Szukam sposobu aby zawartosc Tych plikow tekstowych znalazla sie w jednym pliku - posortowana (a wiec polecenie dir /O niewiele mi tu pomoze , aczkolwiek milo wiedziec ze cos takiego jest :smiley: ). Plik "do_posortowania.txt" mial zawierac jedynie liste plikow wraz z ich sciezkami na dysku - nastepnie z listy tej mialy byc pobierane pojedyncze rekory, i podstawione w petli do opcji sort. Czy plik jest nadpisywany, nie wiem bo program ani przez chwile nie dzialal tak jakbym sie mogl tego spodziewac, poprostu zwyczajnie nie dziala, ale mysle ze jest to mozlwie. Zatem jak posortowac zawartosc wielu plikow txt znajdujacych sie w wielu podfolderach i umiescic ja w jednym pliku?


(Hindol) #5
echo.>sklejka.txt


FOR /R %%I IN (*.txt) DO copy /b sklejka.txt + "%%I" sklejka.txt

sort sklejka.txt /O sklejka_sorted.txt

jakoś nigdy nie doszłem do bawienia się tokenami, wszystko zawsze się dało prościej zrobić :slight_smile:


(Przybysz Przybyszenko) #6

WIelkie dzieki za pomoc! Dziala jak marzenie :smiley: wlasnie o taki efekt chodzilo. Faktycznie poniosla mnie chyba fantazja, bo ten batch jest zawstydzajaco skromny i prosty.


(Przybysz Przybyszenko) #7

WIelkie dzieki za pomoc! Dziala jak marzenie :smiley: wlasnie o taki efekt chodzilo. Faktycznie poniosla mnie chyba fantazja, bo ten batch jest zawstydzajaco skromny i prosty.


([alex]) #8

zamiast:

echo.>sklejka.txt

FOR /R %%I IN (*.txt) DO copy /b sklejka.txt + "%%I" sklejka.txt

wystarczy:

copy /b *.txt sklejka.txt

Albo zamiast całości:

type *.txt | sort >posortowana_sklejka.txt

(Hindol) #9

błąd i błąd :stuck_out_tongue_winking_eye: samo

copy /b *.txt sklejka.txt

to uwzględnia tylko pliki z aktualnego katalogu, a miało także lecieć po podkatalogach...

w drugim to samo


(Misiek1928) #10

Zapytam odrobinę nie w temacie... jakie polecacie rzetelne i w miarępełne źródło wiedzy na temat CMD/BATCH? Przydałoby się bardziej zgłębić skrypty windowsowe... :slight_smile:

P.S. Dzięki za ten kod, bardzo się przydał!


(Hindol) #11

katalog windows/help/ntcmds.chm


(Misiek1928) #12

Siedzę na Viście więc trzeba to wycisnąć z płyty XP :wink: Ale dziękuję za informację :slight_smile: