[bat] Wyselekcjonowanie pliku


(hosti) #1

Witam wszystkich,

przychodzę do Was z prośbą o pomoc. Próbuję wy listować pliki, który został utworzony w dniu w którym uruchomi się skrypt z schedulera o danej godzinie.

Przeszukując technet natrafiłem na polecenie forfiles.

@echo off

REM Sprawdzanie czy plik istnieje

forfiles /p C:\katalog\podkatalog /m *.* /D +0 /c "cmd /c IF @fsize GEQ 1000000 (echo @file is a million bytes or larger.) ELSE (echo @file is under a million bytes in size.)"

otrzymuję prawidłowe wyniki :

"plik1.roz" is a million bytes or larger.

"plik2.roz" is under a million bytes in size.

Problem polega na tym, że nie chcę zmiennej która sprawdza wielkości pliku tylko użyć zmienną @file

forfiles /p C:\katalog\podkatalog /m *.* /D +0 /c "cmd /c IF @file (echo @file is a million bytes or larger.) ELSE (echo @file is under a million bytes in size.)"

to otrzymuję:

W tym momencie (echo było nieoczekiwane.

W tym momencie (echo było nieoczekiwane.

Czy muszę za IF @file dać jakiś parametr?

Z góry dziękuję za nakierowanie.


(Grzelix) #2

Co według ciebie robi ta część kodu:

IF @file

?? w orginale jest

IF @fsize GEQ 1000000

czyli if i warunek logiczny jak chcesz tylko wypisać pliki to bez if' a powinno być coś w ten deseń.

@echo off

REM wypisanie plików w dany katalogu

forfiles /p C:\katalog\podkatalog /m *.* /D +0 /c "cmd /c echo @file"

(hosti) #3

myślałem, że @file przekaże do IF'a, że pliki istnieją.

Wypisanie pliku pokazuje się dobrze. Jednak ja muszę sprawdzić w jakiś sposób czy plik jest (czy się utworzył). Jeżeli istnieje to dobrze, jeżeli nie to muszę odpalić start.bat który wyśle maila z powiadomieniem o jego braku.


(Grzelix) #4

http://stackoverflow.com/questions/4340 ... batch-file

forfiles listuje wszystkie istniejące pliki więc musiałbyś sprawdzać

if @file == myFilename

i po przejrzeniu wszystkich uznać że nie istnieje

albo po prostu skorzystać z linku który podałem u góry postu


(hosti) #5

Z listowaniem plików jest wszystko dobrze. Wynik jaki dostaję jest prawidłowy w przypadku gdy on istnieje. Określa to parametr /D +0 (plik utworzony dzisiaj). Jeżeli damy -1 wylistuje wszystkie poprzednie pliki. To akurat jest ok.

Mówię, problem polega w tym, że gdy nie ma pliku to nie wiem co dalej zrobić.

Jeszcze problemem jest to, że plik każdego dnia ma inna nazwę. Dzisiaj jest 0071.roz jutro 0072.roz

-- Dodane 31.07.2012 (Wt) 12:42 --

Może inaczej bo sam się w tym pogubiłem.

Na dysku C:\katalog\podkatalog każdego dnia zapisywany jest plik 0001.roz. Wykonuje to odpowiedni job który coś tam sprawdza i tworzy ten plik.

Mój cel jest taki aby każdego dnia sprawdzić czy dany plik powstał. Jeżeli tak - dobrze (nie trzeba nic robić). Jeżeli nie - źle (musi wyjść informacja w mailu, że trzeba zareagować).

Do sprawdzenia czy plik istnieje użyłem polecenia:

@echo off

REM Sprawdzanie czy plik istnieje

forfiles /p C:\katalog\podkatalog *.* /D +0 /c "cmd /c echo plik @file istnieje"

w wyniku czego otrzymuję

plik "0074.ROZ" istnieje

plik "0074.BOW" istnieje

Pytanie jak wykorzystać te informacje aby teraz sprawdzić, plik jest ok nic nierób, niema pliku odpal kolejny.bat (on wyśle maila z informacja).