Saltrød Horror Show nr. 78

av Odd de Presno.


Publisert i Datatid, Norge nr. 9/1993, side 87.


Søk og erstatt er enkelt når du kun skal endre i en fil. Verre er om du har 26 kapitler av en bok eller en katalog full av batchfiler. Det tar et hav av tid å gå inn i hver enkelt fil på jakt etter et ord eller en tegnrekke for å få jobben gjort.

Jeg har lett lenge etter praktisk hjelpemiddel. Enda har jeg ikke funnet det perfekte, men Gedit (i filen GEDIT22.EXE, 28KB, bidragsønske US$12) er et hederlig forsøk. Skriv

GEDIT *.BAT C:\SYSTEM D:\SYSTEM

for å endre alle forekomster av C:\SYSTEM til D:\SYSTEM i dine batchfiler. Ved hver forekomst av "ordet" blir du bedt om å bekrefte at det er i orden. Tast N, hvis nei. Hurtig.

Vil du endre en del av en linje, som inneholder blanke, <, >, eller |, må det du taster til Gedit omsluttes av gåseøyne (som i "Dette er en test"). Vil du fjerne (som i "Dette er en test"), må "-tegnene erstattes med "/q"-koder.

En svakhet er at Gedit kun arbeider på linjenivå. Kommer "Dette" på en linje og "er en test" på neste, finner ikke Gedit det.

En annen svakhet er at du ikke kan søke etter linjeskift (de norske bokstavene ser ut til å gå bra). Ellers fungerer Gedit bra.

Å flytte filer fra en PC til en annen går som en lek med MS-DOS 6s Interlink, skriverkabel og verktøy som hjelpeprogrammet MOVE (i filen MOVE!.COM, 3KB, gratis, se nr. 2/90 s. 107) og PCOPY (i PCOPY92B.EXE, 107KB, US$20.00, nr. 5/89 s. 116).

Jeg har for tiden tre PCer koplet opp mot en TIKI 486DX på denne måten. Skru på en bryter, gi en kommando og filer svirrer frem og tilbake.

Skal jeg ut på reise, sørger en batchfil for at siste versjon av alle viktige filer under arbeide m/m overføres fra Toshiba 5100 via Tikien til notisbokmaskinen Toshiba 4400SX. Svisj!

Ett problem: Når jeg bruker T5100s O:-stasjon fra denne PCens tastatur heter den O:. Når jeg bruker fra Tikiens tastatur den via Interlink, heter den R:. Det er dessverre så lett å taste feil..

Det beste hadde vært om O: alltid var O:, tenkte jeg, og laget en serie batchfiler for å løse problemet. MV45.BAT flytter filer fra 4400 til 5100. MV54.BAT flytter fra 5100 til 4400. SD5.BAT viser filer i en gikk stasjon/katalog på T5100 med programmet HotDir (i filen HOTDIR.EXE, 68KB, US$20.00, se nr. 6/93 s. 62).

Da prinsippet er det samme i alle filene, kan SD5.BAT brukes som eksempel. Taster jeg kommandoen "sd5 o:\99" på Tikien, gir det en sortert liste over filene i T5100s O:\99-katalog. Det er ikke nødvendig å referere til katalogen som R:\99.

SD5.BAT har følgende innhold (REM-kommentarene bruker eksemplet HDIR O:\99):

@echo off
REM Kontroll av forbindelsen med Toshiba 5100
IF NOT EXIST f:\home\5100.t GOTO no5100
REM Ved hjelp av sharewareprogrammet ENV legges O:\99
REM inn i environmentvariablen MV. Les mer om bruk av
REM slike variabler i MS-DOS håndboken og vedlegget til
REM ENVs brukerdokumentasjon.
ECHO %1|ENV SET mv
REM Ved hjelp av ENV deles stien O:\99 i to. Den første
REM delen, som består av tegn 1 i kolonne 1 (bokstaven O)
REM lagres i environmentvariablen DIR. Resten (fra bokstav
REM 2 til 70, om stien er lang) legges i variablen STI.
ENV CALC dir=mid(%mv%~1~1)
ENV CALC sti=mid(%mv%~2~70)
REM I disse kommandoene testes innholdet i DIR-variablen
REM for å finne ut hvilken kommando som skal gis til HDIR.
REM Det blir tilslag på siste linjen. SD5.BAT utfører derfor
REM følgende kommando: HDIR r:\99
IF (%dir%)==(c) HDIR f%sti% %2 %3 %4
IF (%dir%)==(d) HDIR g%sti% %2 %3 %4
IF (%dir%)==(e) HDIR h%sti% %2 %3 %4
IF (%dir%)==(f) HDIR i%sti% %2 %3 %4
IF (%dir%)==(g) HDIR j%sti% %2 %3 %4
IF (%dir%)==(h) HDIR k%sti% %2 %3 %4
IF (%dir%)==(i) HDIR l%sti% %2 %3 %4
IF (%dir%)==(j) HDIR m%sti% %2 %3 %4
IF (%dir%)==(k) HDIR n%sti% %2 %3 %4
IF (%dir%)==(l) HDIR o%sti% %2 %3 %4
IF (%dir%)==(m) HDIR p%sti% %2 %3 %4
IF (%dir%)==(n) HDIR q%sti% %2 %3 %4
IF (%dir%)==(o) HDIR r%sti% %2 %3 %4
GOTO exit
:no5100
ECHO T5100 ikke tilkoplet
GOTO exit
:exit

Batchfilen blir lang, men den virker. Det eneste problemet er at den ikke fungerer i et DOS Shell under programmet 1stReader.

ENV er en kraftig plugg med mange interessante egenskaper for entusiastiske batch-filbrukere. Det kan lese data fra tekstfiler, dBase og regnearkfiler (Lotus 1-2-3, Symphony, Borland Quattro og Quattor Pro) og komma-delte filer. Resultatet kan analyseres for bruk i batchfiler.

Å, dette har jeg savnet lenge! Å kunne plukke linjer ut av en tekstfil - en etter en - og kunne gjøre ting ut fra innholdet i linjen. Jeg har f.eks. mange anvendelser i forbindelse med rydding på Tikiens 425MB store harddisk basert på lister over filnavn.

Her er en generell og forenklet batch-fil for "plukking" av filnavn fra bulletin nr. 14 på Saltrød Horror Show (Min batchfil kjøres på en RAM-disk og med ENVs BATCH-kommando for økt hastighet):

@echo off
REM Leser filen BULLET14 fra og med linje 12, tegn 1-12.
REM Linjenummeret ligger lagret i variablen LN
SET LN=12
:plukk
REM ENV plukker den linjen i filen som er angitt i
REM environment-variablen %LN%.
REM Til høyre i formelen angis start (kolonne 1)
REM og slutt (kolonne 12).
ENV CALC XX=MID(READLN(BULLET14~%LN%)~1~12)
REM Her kan inntas mere vettuge kommandoer
ECHO %xx%
REM Jobben er gjort. Hent neste linje fra filen.
REM Nytt linjenummer er (Linjenummeret+1)
ENV CALC LN=(%LN%+1)
goto plukk

Kommandoelementet "~1~12" i den første CALC- kommandoen er spesielt interessant. Den kan også brukes for ytterligere analyser av det som plukkes. Det er f.eks. relativt enkelt å utvide batchfilen ut med en test av om filnavet har "." i posisjon 9 (som i KIDSHOW1.EXE), slik at det korrigeres før videre bearbeiding i en flytt filen operasjon eller lignende.

Det er også lett å finne ut om en linje ikke inneholder et filnavn (f.eks. ved å teste på om første delen av variablen XX er blank).

Automatisk flytting, sa jeg. Jeg ønsket å undersøke om filene i BULLET14-filen lå lagret i katalogen D:\TEST\99. Hvis ja, ville jeg ha dem flyttet til D:\TEST\OLDFILES. Følgende tilleggskommandoer gjorde jobben:

REM Hvis filen finnes, utfør flyttejobben
IF EXIST d:\test\99\%xx% GOTO flytt
:flytt
REM Skriv et notat hvis filnavnet eksisterer og hopp
REM evt. over denne filen. Filen slettes helt til slutt
REM ved hjelp av Fast File Finders slettefunksjon
REM (i filen FF211.EXE, 15KB). Dette er ikke med her.
IF EXIST d:\test\oldfiles\%xx% GOTO rapport
REM Flyttingen skjer med programmet i MOVE!.COM nevnt over.
MV d:\test\99\%xx% d:\test\oldfiles
GOTO grab
:rapport
ECHO %xx% finnes i d:\test\oldfiles >>e:\rydd\rapport
goto grab

Tilsammen hadde jeg 17 andre filkataloger, som skulle behandles på samme måte. Dette løste jeg ved å føye et kontrollord til helt til sist i BULLET14 filen, med

ECHO ----slutt--->>bullet14

Dette kan testes med "if (%xx%)==(----slutt---) goto nykatalog", slik at batchfilen vet når den kan skifte til neste katalog.

ENVs innebygde kalkulator er svært avansert, med vitenskapelige, dato-, tids- og logiske funksjoner. Resultatet av tekstbearbeidingen kan brukes i ENVs matematiske beregninger.

ENV kan be om brukerinput i BATCH-filer. Du kan interaktivt redigere eksisterende eller nye variabler og mye mer. ENV lar deg bruke all tilgjengelig environmentkapasitet i PCen din. Programmet ligger i ENV20.EXE (59KB, bidragsønske US$20). Du vil antakelig finne bruksanvisningen litt i korteste laget.

DELETE SENTRY er bra, men det drøyde før jeg fant ut av den nye MS- DOS 6 kommandoen. I mellomtiden var det ofte for lite plass på Tikiens 425MB+ harddisk.

UNDELETE-kommandoens Delete Sentry-innstilling flytter slettede filer midlertidig til en egen (skjult) katalog på disken. Bra! Dermed blir det lettere å rekonstruere dem, om du senere angrer.

Nøkkelen til problemene mine lå i filen C:\DOS\UNDELETE.INI. Kravene mine til hvor stor katalogen skulle være hadde ikke vært strenge nok. Resultatet ble at jeg ofte hadde for lite plass.

Jeg strammet inn kravet for når filer skulle bort fra SENTRY-katalogen med følgende kommandoer:

days=3
percentage=2
sentry.files=*.* - *.USA - *.QWK - *.ZIP

Den første gjør at alle filer eldre enn tre dager kastes ut, om det er for lite plass i SENTRY-katalogene. Maksimal størrelse på katalogene skal være på 2 prosent av tilgjengelig kapasitet. Det fikk holde.

Den siste linjen angir at alle filer skal sikkerhetskopieres unntatt de som ender på *.USA (USA Today nyhetsfiler fra Euronet), *.QWK (QMail meldingspakker fra diverse BBSer) og *.ZIP (da jeg oppbevarer filer som selv-utpakkende LHA *.EXE-filer). Dermed var problemet delvis løst.

DIR-kommandoen gir feil antall bytes, når du kjører med DELETE SENTRY. Det er umulig å stille inn kommandoen for å gi korrekt tall. DIRs oppgir antall bytes ledig som om SENTRY-katalogen var tom. Ingen av "vis antall bytes"-programmene jeg har testet er smarte nok til å oppdage problemet. Bortsett fra CHKDSK.EXE.

Bruker du DELETE SENTRY, kan du bruke BATCH-filen PLASS.BAT for å få antall ledige bytes på denne måten:

@ECHO OFF
ECHO vent litt ...
CHKDSK c:>e:\drive.dat
ECHO C-stasjonen har
FGREP -SX 's ava' e:\drive.dat
DEL e:\drive.dat

E:-stasjonen er en RAM-disk. Gamle gode FGREP (i filen FGREP171.EXE, 15KB, gratis) finner linjen med "bytes available on disk". Rapporten ser slik ut:

  vent litt..
  C-stasjonen har 
     2459648 bytes available on disk 

Det tar tid, men det virker.



Det er forbudt å distribuere denne artikkelen - eller deler av den - i elektronisk, trykt eller kopiert form mot betaling.