[bat] Wyszukiwanie i usuwanie

Witam!

Chciałbym się dowiedzieć jak napisać plik wsadowy wyszukujący dany plik na komputerze i usuwający go bez potrzeby ingerencji użytkownika.

Na programowaniu w DOS znam się nie najgorzej lecz nie wiem jak zrobić by znalezioną ścieżkę pliku uczynić zmienną, którą się użyje do usunięcia pliku.

Hmm… czyżby to mogło być aż tak proste jak:

SET SCIEZKA="C:\coś\tam\coś\tam"

DEL /y %SCIEZKA%\*.*

??

A może to jednak jest trochę bardziej skomplikowane i potrzebujesz tą ścieżkę pobrać skądś? Np z jakiegoś (tymczasowego) pliku, tak ja tu -> http://www.the-scream.co.uk/forums/t21196.html

PS Ostatni post pobiera dane do podstawiania za zmienną wprost z stdout wiersza poleceń. Pozwala to ominąć zapisywanie do pliku, oczywiście jeżeli z innych przyczyn nie ma takiej potrzeby.

Generalnie chodziło mi o to, że gdzieś na komputerze, na jednym z dysków w nieznanym dla nas miejscu znajduje się np. PLIK.txt. I teraz program powinien wyszukać ten plik na jednym z dysków, zapisać jego ścieżkę (np. jako zmienną) i przy pomocy polecenia DEL usunąć ten plik.

Jak chcesz usunąć konkretny plik o charakterystycznej nazwie, to możesz użyć del z parametrem /s (usuwa pliki o podanej nazwie z folderu i podfolderów).

Jak to plik ukryty lub systemowy to są przełączniki, które to uwzględniają np. pliki Thumbs.db usuwałem sobie tak: del /s /ahs Thumbs.db

Przy stosowaniu maski z ‘*’ przydaje się przełącznik /q (bo inaczej o każdy plik jest pytanie).

Z tym zapisaniem ścieżki jako zmiennej, to już trochę więcej zabawy chyba. Ale raczej też się powinno dać, choć nie mam teraz pomysłu jak :wink:

Jak narazie mam tak:

dir c:\"plik.*" /s /b > C:\znalezione.txt

dir d:\"plik.*" /s /b > C:\znalezione.txt

dir e:\"plik.*" /s /b > C:\znalezione.txt

dir f:\"plik.*" /s /b > C:\znalezione.txt

SET %y% < C:\znalezione.txt

Załatwia to problem z różnymi dyskami.

–EDIT–

Jednak ścieżka się nie zapisuje.

Na razie widzę jeden problem. Jak na ostatnim przeszukiwanym z kolejnych dysków nie znajdzie pliku, to znalezione.txt będzie pusty. Może pomyśl o użyciu ‘>>’ w poszukiwaniach na kolejnych dyskach. (’>>’ dopisuje do pliku zamiast go nadpisywać)

set a=plik.*

dir i:\"%a%" /s /b >> C:\znalezione.txt

dir c:\"%a%" /s /b >> C:\znalezione.txt

dir d:\"%a%" /s /b >> C:\znalezione.txt

dir e:\"%a%" /s /b >> C:\znalezione.txt

dir f:\"%a%" /s /b >> C:\znalezione.txt

dir g:\"%a%" /s /b >> C:\znalezione.txt

set y < "C:\znalezione.txt"

del %y%

Przypadkiem usunęło mi wiele plików z pulpitu i jak się pewnie kiedyś okaże wiele z innych miejsc… Ale to nic… Przynajmniej mam czysty pulpit i nie muszę go sprzątać :smiley: Tylko nadal nie wiem jak przypisać do zmiennej ścieżkę… --EDIT-- Zrobiłem. Musiałem użyć tokena:

@echo off

set a="znaleziony.*"

dir i:\"%a%" /s /b > C:\znalezione.txt

dir c:\"%a%" /s /b >> C:\znalezione.txt

dir d:\"%a%" /s /b >> C:\znalezione.txt

dir e:\"%a%" /s /b >> C:\znalezione.txt

dir f:\"%a%" /s /b >> C:\znalezione.txt

dir g:\"%a%" /s /b >> C:\znalezione.txt

pause

FOR /F "tokens=1" %%i IN ( C:\znalezione.txt) DO del %%i

Przydałoby się teraz jeszcze dodać cudzysłów dla każdej ścieżki, bo gdy wyszukany plik znajduje się w folderze zawierającym spację to program przestaje działać i nie usuwa.