Witam,
Potrzebuję pomocy przy poskładaniu komend w jeden skrypt. Celem jest zrobienie skryptu który:
Wylistuje wszystkie pliki z katalogu (rekursywnie)
Obliczy sumę md5 dla aktualnie listowanego pliku
Porówna nazwę wylistowanego pliku z nazwą w liście:
3.1 Jeśli nie ma nazwy w pliku to > wpisz nazwę:sumę md5
3.2 Jeśli jest i nazwa różni się sumą to usuń tę linię i wstaw nową (podmieniając md5)
Zmieniony pik skompresuj i pozostaw w tej lokalizacji.
Poniżej kod który udało mi się uruchomić osobno, jednak nie umiem tego wszystkiego złączyć w jedno:
Listuję pliki for /r D:\test %f in (*.*) do echo "%f"
Obliczam sumy z plików rekursywnie for %i in (*.*) do fciv.exe %i >> lista_md5
Wyświetlam pliki w liście (muszę je jeszcze jakoś porównać z tymi wylistowanymi) for /f "tokens=*" %i in (list.txt) DO (echo %i)
Kompresja pliku: 7za a -ttar E:\test\files.tar E:\test\* -r
set path=%path%;C:\fciv;C:\Program Files\7-Zip
for /r D:\test %%f in (*.*) do echo "%%f"
for %%i in (*.*) do fciv.exe %%i >> lista_md5
for /f "tokens=*" %%i in (list.txt) DO (echo %%i)
7z a -ttar E:\test\files.tar E:\test\* -r
chyba działa, jedynie sobie dodałem zmienną path i 7za zmieniłem na 7z (tyle, że u mnie nie ma w nim nic więcej poza kolejnymi dwoma archiwami tar i ostatnie jest puste albo archiwum nie powstaje).
Na krok 3.1, 3.2 nie mam pomysłu, dodatkowo jakieś śmieci do pliku wrzuca to narzędzie Microsoft.
//
// File Checksum Integrity Verifier version 2.05.
//
I takie coś w koło Macieju po każdej obliczonej sumie.
Dzięki za podpowiedź, zrobiłem kilka poprawek, ale jednak wydaje mi się że nie mogą być to komendy jedna pod drugą niezależne, bo przecież one muszą robić te 4 operacje na tym samym pliku, poźniej iść do kolejnego itd, więc powinny być jakoś zagnieżdzone.
set path=%path%;D:\test2\fciv;D:\test2\7za
for /r D:\test2\dir %%f in (*.*) do echo "%%f"
for %%i in (*.*) do fciv %%i >> list.txt
for /f "tokens=*" %%i in (list.txt) DO (echo %%i)
D:\test2\7z\7za a -ttar D:\test2\files.tar D:\test2\dir * -r
Ten kod tworzy wpisy w list.txt ciągle dodając kolejne, nie sprawdza czy już taki jest
Dopiero jeśli sprawdzi i nie ma powinien dopisać i spakować TYLKO ten plik.
set path=%path%;D:\test2\fciv;D:\test2\7za
cls
for /r D:\test2\dir %%f in (*.txt) do (
findstr /m "%%f" list.txt
if %%f=="list.txt" (
D:\test2\7z\7za a -ttar %%f.tar %%f -r
)
)
W teorii ten kod jeśli znajdzie nazwę pliku ze świeżką w liście to powinien wyświetlić nazwę pliku, i wtedy spakować, ale tego nei robi.
chyba problem jest z tym że ścieżka zawiera “/”.