Usuwanie plików zawierających podany ciąg znaków

Dobry!

Do pracy trafiło mi nowe ustrojstwo, które w toku działania generuje raporty zawierające różne typy danych. Po zakończeniu działania danego procesu, pozostaje na dysku mnóstwo plików raportów. Niestety usuwanie głównego pliku raportu nie usuwa poszczególnych pod-raportów.

Chciałbym ogarnąć to za pomocą prostego narzędzia odpalanego w CMD lub Powershellu. Podaję numer raportu i usuwa mi wszystkie pliki zawierające ten numer.

Myślałam o wykorzystaniu polecenia:

del /s *xxxx.*

Wszystko działa okay, tylko nie wiem w jaki sposób wywołać wiersz poleceń, aby pytał o wprowadzenie danego numeru, a po jego wprowadzeniu wykonał to właśnie polecenie w podanych wcześniej folderach.

@bachus @FadeMind @krystian3w @Fizyda jesteście w stanie pomóc?

A jaka to różnica czy wowałasz

del /s *xxxx.*

czy

mojprogram xxxx.

?
­
­
Chyba, że laga złapałem :stuck_out_tongue_winking_eye:

@anon87270658 Oj złapałeś, złapałeś :smiley:

@BloodyEyes jak chodzi o batch to ja bardzo słaby z tego jestem i zazwyczaj ograniczam się do szukania części rozwiązania w necie i dostosowania do własnych potrzeb.
Musisz utworzyć plik ze skryptem czyli bat, w nim pobrać numer i wykorzystać w poleceniu którym kasujesz wszystko.
Kasowanie masz, plika ze skryptem to easy peasy dasz rade :wink:, a co do pobierania danych od użytkownika to znalazłem coś takiego: http://inanecoding.co.uk/2011/06/simple-user-input-in-batch-files/

Efekt końcowy powinien być taki, że uruchomisz skrypt, otworzy Ci się konsola, podasz numer i skasują się pliki. Można rozbudować to jeszcze o podawanie ścieżki w której mają być szukane i kasowane pliki.

EDIT:
Trzeci raz edytuję post bo nie umiem nawet znaleźć informacji w google na temat pisania skryptów pod windowsa, wszystko tylko pod linuxa …

1 polubienie

Nie mam gdzie sprawdzić, ale trzeba poszukać odpowiednika “parametrów pozycyjnych” w bash, np. "$1".

https://commandwindows.com/batch.htm => to je dobre :stuck_out_tongue_winking_eye:

PowerShell:
https://devblogs.microsoft.com/scripting/create-a-simple-graphical-interface-for-a-powershell-script/ .

Dobra ogarnąłem coś takiego jako punkt wyjścia:

@ECHO off
SET /p _reportNumber= Podaj numer raportu:

ECHO del /s *%_reportNumber%.*

PAUSE

W linii 4 trzeba usunąć ECHO żeby kasowało pliki. Dodałem to by widzieć co się dzieje, ale niczego nie kasowało.

1 polubienie

@Fizyda - cały czas koło tego krążyłam, ale nie potrafiłam ustalić zmiennej, która będzie usuwało. Dzięki Ci bardzo!

1 polubienie

Spoko, nie gwarantuję, że to będzie działało dobrze, przetestuj i daj najwyżej znać. Gdyby coś dalej nie działało to będziemy kombinować, tylko napisz jak to rozwiązanie działa i co robi źle bo ja to też tak po omacku tutaj błądzę :stuck_out_tongue:. Dla mnie lepszy jest bash, choć i tego nie bardzo trawię i jak trzeba napisać skrypt nawet kilku linijkowy to bardzo cierpię :smiley:.

PS. Jak poczekasz na pozostałych Panów to może wymyślą coś lepszego :wink:.

Już mogę Ci napisać, że działa :slight_smile:

Normalnie pliki raportów nie byłyby problemem, gdyby nie to, że wczytując następny, otwieram okno wyboru, które przy tak dużej ilości plików po prostu się zawiesza. Jest to oprogramowanie napisane chyba na kolanie, przez włoską firmę. Teraz po zakończeniu danej operacji wbijam czterocyfrowy kod raportu i usuwa mi wszystkie pliki powiązane z tym numerem (tj. każdorazowo około 35 plików).

Teraz spróbuję te same zachowanie przenieśc do PowerShella i opakować to jakoś ładnie :slight_smile:

Tutaj nie pomogę, ale szukając informacji jak się pobiera dane w cmd o usera widziałem, że można wygenerować całkiem ładne prompty pobierające od użytkownika wiele zmiennych na raz.
Tutaj to widziałem: https://devblogs.microsoft.com/scripting/create-a-simple-graphical-interface-for-a-powershell-script/

Ale dla mnie to już krzaczki których nie chcę rozumieć :stuck_out_tongue:. Chyba wolałbym to zrobić w C# niż powershellu :rofl:.