Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Batch: Tarkistus komentojonotiedostossa

Codeprofile [05.01.2007 11:50:39]

#

Tää ei nyt välttämättä liity ohjelmointiin mitenkään, mutta kysyisin silti erästä asiaa: Miten tehdään semmoinen komentojonotiedosto, joka suorittaa komennon 'chkdsk', niin ettei komennon suoritusta näy. Tätä on vähän vaikeaa selittää, mutta se menee jotenkin tähän tyyliin:

@echo off
echo tarkistetaan virheistä....
chkdsk
cls
echo suoritus valmis!
pause

Tuo pitäisi siis onnistua niin, ettei ohjelma näytä komennon suoritusta. Tietokone siis suorittaa komentoa, muttei näytä sitä käyttäjälle. Sen sijaan, ruudulla näkyy tietty ilmoitus (tässä tapauksessa="tarkistetaan virheistä...."). Vasta kun tehtävä on suoritettu, ruudulle tulee ilmoitus "suoritus valmis!".

EDIT: Ja sitten vielä semmoinen, että jos tarkistus epäonnistui, ruudulla näkyy ilmoitus epäonnistumisesta.

Antti Laaksonen [05.01.2007 19:59:39]

#

Ohjelman tulostuksen voi ohjata tiedostoon näin:

chkdsk > tiedot.txt

Nyt tiedostoon tiedot.txt ilmestyvät ne tekstit, jotka chkdsk olisi tavallisesti tulostanut näytölle.

Tällä tavalla tulosteesta pääsee eroon lopullisesti:

chkdsk > nul

Nyt ohjelma ei tulosta mitään, eikä tuloste myöskään mene talteen minnekään.

Jotkut ohjelmat asettavat suorituksen jälkeen errorlevel-muuttujan, josta voi päätellä, tapahtuiko virhettä. Parin nettisivun perusteella chkdsk asettaa arvon 0, jos kaikki meni hyvin, ja arvon 255, jos tapahtui virhe. Joka tapauksessa errorlevel-muuttujaa voi tutkia näin:

if errorlevel 255 echo Pieleen meni!

Codeprofile [06.01.2007 19:02:52]

#

Mutta miksei se toimi jos laitan tämmöisen koodin:

@echo off
echo Tarkistetaan levyä virheistä....
chkdsk > data\tiedot.dat
echo Tarkistus suoritettu loppuun!
if errorlevel 255 echo Tarkistus epäonnistui!
pause

Kun pistin tuon data\-kohdan, ohjelma ei toimi.

EDIT: ei se näytä muutenkaan toimivan enää. Aluksi se toimi, mutta nyt ei toimi edes pelkkä chkdsk:kaan. Ohjelma tulostaa näytölle perä perää tekstin chkdsk. Tiedoston sisältö tuleekin nyt tässä:

chkdsk

Tuskimpa se tuossa koodissa nyt mättää. Missä se vika nyt sitten mahtaa olla? Outoa. Kyllä tuon yhden järjestelmäkomennon nyt luulisi toimivan...

EDIT2: Epäilyttää kyllä pahasti siltä, että kone yrittää vänkyttää peräkkäin sitä komentoa, eikä järjestelmä ehdi aloittamaan tarkistusta, ennenkuin seuraava komento jo tulee. Mutta mites sen jatkuvan järjestelmäkomennonsyötön saa katkastua yhteen komentoon??

EDIT3: Suoritin chkdsk:n parametrillä -f, ja ruutuun tuli tämä: DOS-ikkunassa luki teksti: "CHKDSK-ohjelmaa ei voida suorittaa, koska ohjelmaa käyttää toinen prosessi. Suoritetaanko tarkistus seuraavan käynnistyksen yhteydessä? (K/E)". En minä vaan löydä prosessien joukosta yhtään chkdsk:ta käyttävää prosessia. No johan on oudoksi tullut....

Codeprofile [07.01.2007 21:49:49]

#

Nyt CHKDSK ei toimi sitten enää lainkaan. Pitäiskö mun formatoida c:-asema?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta