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.
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!
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....
Nyt CHKDSK ei toimi sitten enää lainkaan. Pitäiskö mun formatoida c:-asema?
Aihe on jo aika vanha, joten et voi enää vastata siihen.