Gå til innhold

Anbefalte innlegg

Forord:

 

Denne artiklen er til for å lære deg det grunnleggende om batch,

den er ikke beregnet på å lære folk å lage virus.

PS: denne artiklen er beregnet på Windows XP professional brukere,

commandoene kan vere noe annerledes i andre versjoner.

 

Hva er en batch?

Batch er et program som er satt sammen av flere cmd commandoer.

For å lage en batch fil må du åpne notepad (du skriver programet i notepad), og

lagrer documentet som navn.bat (navn kan skiftes ut med ønsket navn).

Høyre klikk på batch filen din og klikk "Rediger", flott nå kan vi begynne å skrive.

Alle program du lager skal starte med:

 

@echo off
cls

 

@echo off sørger for at programkoden blir skjult,

cls gir deg en blank skjerm i cmd.

For å vise tekst til brukeren skriver du enkelt nok bare echo foran.

f.eks:

 

@echo off
cls
blablabla
echo hei!
blablabla
pause
exit

 

Alt brukeren vil se er "Hei!", så vil brukeren bli bedt om å trykke en tast for

å fortsette (pga commandoen pause), deretter vil programet bli avsluttet ved

hjelp av commandoen exit.

En annen metode du kan bruke for å vise tekst til brukeren er MSG commandoen.

msg (bruker) (meldingen din her)

f.eks:

 

@echo off
cls
msg administrator Hei Admin!
pause
exit

 

Dette scriptet (programkoden) vil gi brukeren administrator en meldings-box som

sier: "Hei Admin!".

For å sende melding til alle brukerene kan du erstatte brukeren med *.

f.eks:

 

@echo off
cls
msg * hei alle sammen!
pause
exit

 

Da vil alle aktive brukere få meldingen "Hei ale sammen!".

Vis du vil at programet dit skal starte et annet program, kan du bruke

commandoen START.

f.eks:

 

@echo off
cls 
start firefox.exe
pause
exit

 

Dette scriptet ville starte firefox.

Hvordan lage løkker i batch?

f.eks:

 

@echo off
cls
:loop
start firefox.exe
goto loop

 

Dette programet ville starte uendelig mange firefox (jeg vet hva du tenker,

vær så snill, ikke bruk dette til å plage vennene dine).

:loop lager en liste med commandoer, kalt loop.

start firefox.exe bør dere vite hva gjør...

goto loop forteller programet at det skal gå til listen loop,

og siden goto loop er en del av loop, vil loop bli kjørt om og om igjen...

Men vi kan og bruke lister til å hoppe over commandoer.

f.eks:

 

@echo off
cls
goto next
pause
exit
:next
echo hallo!
pause
exit

 

goto next får programet til og hoppe over commandoene pause og exit,

og gå direkte til listen next.

Med andre ord, programet hopper over to linjer.

Hvis dere fortsatt henger med kan vi begynne på variabler,

variabler er informasjon som kan endres under programmets gang,

og som blir slettet når programmet blir avsluttet.

Variabler kan f.eks være navn som brukeren taster inn.

For å lage en variabel bruker vi commandoen set /p navn=,

navn kan skiftes ut med ønsket navn.

f.eks:

 

@echo off
cls
echo Skriv inn navnet ditt.
set /p navn=
cls
echo Hi %navn%
pause 
exit

 

set /p navn= lager en variabel ved navn "navn".

echo hi %navn% viser teksten "hi (det navnet brukeren skrev inn)"

Hvordan kan vi samenligne variabler?

f.eks:

 

 

@echo off
cls
echo Skriv inn passord!
set /p passord=
IF %passord% equ lol goto rett
cls
echo Feil passord!
pause
exit
:rett
cls
echo rett passord!
pause
exit

Her skriver brukeren inn passordet, deretter bruker vi commandoene IF

og equ til og sammenligne det brukeren skrev inn og passordet.

IF %passord% equ lol goto rett = hvis variablen passord er lik lol gå til rett.

 

Jeg har utelatt rundll32 og andre ting som kan være destruktive fra denne artiklen,

dette er av sikkerhet's grunner.

Håper dere lærte noe nyttig, har dere spørsmår er det bare å poste.

Endret av LooneyTune
Lenke til kommentar
  • 1 måned senere...
Videoannonse
Annonse
Har et spørsmål ;)

Finnes det en kommando som gjør at skriptet tar en pause i et egendefinert antall sekunder?

Feks. Så det kunne skifte farge annenhvert sekund el.

 

Edit: Fant det ut selv :blush:

Bruker vel ping kommandoen til sånt...

7123778[/snapback]

 

Ping har ingenting med det å gjøre :p

 

Ping er for å sende forespørsler til andre maskiner på nettverket/internett for å se om de svarer, etc.

Lenke til kommentar

Angående guiden; hvorfor bruker du engelske og norske ord om hverandre? Det heter kommando, ikke commando. Og hvorfor bruker du goto next istedet for goto neste?

 

Bare pirking fra min side... Ellers kan det vel sies at batch ikke kan brukes til noe særlig mye nyttig, hvertfall ikke det guiden din tar opp. Til noe av det du viser her i guiden, er det lettere og bedre å bruke et "skikkelig" programmeringsspråk som f.eks. Python.

Lenke til kommentar
Joda, men når jeg skrev "PING 1.1.1.1 -n 1 -w 1000 >NUL" så tok den pause i 1000 millisekunder (1 sekund).

Vet ikke hvordan kommandoen er bygd opp, men den virker for meg 

Blir vel det samme som Sleep i C++.

Denne kommandoen funker fint etter min erfaring :thumbup:

Angående guiden; hvorfor bruker du engelske og norske ord om hverandre? Det heter kommando, ikke commando. Og hvorfor bruker du goto next istedet for goto neste?

 

Bare pirking fra min side... Ellers kan det vel sies at batch ikke kan brukes til noe særlig mye nyttig, hvertfall ikke det guiden din tar opp. Til noe av det du viser her i guiden, er det lettere og bedre å bruke et "skikkelig" programmeringsspråk som f.eks. Python.

Alt jeg leser om pc er skrevet på engelsk (du må jo lese for å lære noe),

dette fører til at jeg kansje bruker mer engelsk når jeg driver med programmering...

Og Python kan jeg nok dessverre ikke noe med (jeg kan bare VB, html, php, batch (kan vel ikke regnes som programmering) og litt av noen andre språk).

 

Edit: en leif...

Endret av LooneyTune
Lenke til kommentar
  • 3 uker senere...

Fin guide dette, godt utganspunkt! Ser du laget et eksempel med start firefox.exe. Holder for tiden på med et større skript som har en del som ligner på det eksemplet.

 

Jeg ønsker at firefox.exe skal bli startet, og om det ikke er installert åpnes iexplore.exe med nedlastningssiden. Slik ser den delen av skriptet ut:

 

IF EXIST firefox.exe. (
start firefox.exe
) ELSE (
echo firefox.exe er ikke installert.
start iexplore.exe http://firefox.com
)

 

Selvfølgelig ser den etter om firefox ligger i samme mappe som bat-filen. Det kunne jeg løst ved å definere målmappen (c:\programfiler\mozilla....\firefox.exe) men dette batch-skriptet skal brukes på flere enn en pc, der mozilla muligens er installert på andre mapper, partisjoner og etcetra. Det jeg vil at den skal gjøre er at den tar en "start firefox.exe" - hvis filen finnes fortsetter skriptet som vanlig, hvis filen ikke eksisterer går den til start iexplore.exe http://firefox.com

 

Noen som kan hjelpe?

Endret av EivindF
Lenke til kommentar

Dessverre vet jeg ikke om CMD kan lese noe path fra Windows, utenom system path og slike helt elementære baner.

Men dersom man har intsallert Firefox til default mappa kan dette fungere:

 

PS. Legg merke til hva for en horribel løsning MS har gjort for lange fil/mappe-navn/baner i CMD...

 

@ECHO OFF
CLS
IF EXIST C:\PROGRA~1\FIREFOX\MOZILL~1\FIREFOX.EXE GOTO :FFSTART
GOTO :FFERR

:FFERR
ECHO.
ECHO Error: Firefox not installed.
ECHO Internet Explorer will now open the Mozilla Firefox download page.
ECHO.
PAUSE
C:\PROGRA~1\INTERN~1\IEXPLORER.EXE HTTP://WWW.GETFIREFOX.COM
GOTO :EXIT

:FFSTART 
C:\PROGRA~1\FIREFOX\MOZILL~1\FIREFOX.EXE
GOTO :EXIT

:EXIT

Endret av skag1
Lenke til kommentar

Hva kan jeg skrive for å åpne batch i samme vindu som det første?

 

Enda et spørsmål: Jeg tok utgangspunkt i skag1's kode. Hva er feil?

@ECHO OFF
Echo sjekker...
IF EXIST %programfiles%\CCleaner\ccleaner.exe GOTO :Fins
ECHO Fant ikke programmet Crap-Cleaner

:Fins
Echo Fant programmet Crap-Cleaner starter prosessen
open Defrag.bat

Endret av Thor.
Lenke til kommentar

Ah! :idea:

%programfiles% funker jo som bare det! Det viste jeg ikke :)

 

Her er hvordan batchen din kanskje heller burde være:

@ECHO OFF
CLS
ECHO.
ECHO Sjekker...
IF EXIST %programfiles%\CCleaner\ccleaner.exe GOTO :EXIST
ECHO Fant ikke programmet Crap-Cleaner
GOTO :END

:EXIST
ECHO Fant programmet Crap-Cleaner starter prosessen
CALL Defrag.bat
GOTO :END

:END
EXIT

 

"OPEN" er ikke en gyldig batch/DOS-kommando!

Du kan bruke "CALL" som vil pause batchen hvor denne kommandoen oppstår, åpne batchen du kaller og kjøre denne. Når batchen du kaller er ferdig vil den orginale batchen, hvor kallet oppsto, fortsette. Slik var det hvertfall i MS-DOS 6.22.

Men husker ikke om batchen du kaller må inneholde en "EXIT"-kommando til slutt for å avsluttes korrekt, men her er det bare å prøve seg fram. :)

 

Edit: Glemte å si at "CALL" bruker du kun dersom du vil kjøre mer kode i batchen hvor du benytter "CALL". Siden det ikke er mer som skal gjøres i den batchen jeg har skrevet over, kunne jeg likegjerne bare ha gjort det slik:

 

[code]@ECHO OFF
CLS
ECHO.
ECHO Sjekker...
IF EXIST %programfiles%\CCleaner\ccleaner.exe GOTO :EXIST
ECHO Fant ikke programmet Crap-Cleaner
EXIT

:EXIST
ECHO Fant programmet Crap-Cleaner starter prosessen
Defrag.bat

Endret av skag1
Lenke til kommentar

Jeg lærte meg å bruke choice i 1996, så hukommelsen min kan være noe rusten akkurat her! :p

Men CMD/Windows XP støtter ikke lengre choice, dessverre. Vet dog ikke om det har kommet noen kommandoer som substituerer choice, men tviler egentlig.

 

Om jeg ikke husker helt feil fungerte choice slik:

 

CHOICE [/C:choices] [/N] [/s] [/T:choice,timeout] [TEXT]

Where -:

 

* /C:choices : specifies the choices that the user can choose from. The choices can only be single characters.

* /N : Do not display choices and the '?' at the end of the TEXT prompt.

* /S : Treat the choices as case sensitive, meaning that 'a' is a different choice from 'A'. By default, case is not sensitive - 'a' is equivalent to 'A'.

* /T:choice,timeout : Default to choice after timeout seconds.

* TEXT : The text to display as the prompt of the choice.

Choice command help

 

Eksempel:

 

CHOICE /CABCD Hvilken stasjon vil du formatere?

IF ERRORLEVEL 1 GOTO :A

IF ERRORLEVEL 2 GOTO :B

IF ERRORLEVEL 3 GOTO :C

IF ERRORLEVEL 4 GOTO :D

 

:A

FORMAT A:

EXIT

 

:B

FORMAT B:

EXIT

 

:C

FORMAT C:

EXIT

 

:D

FORMAT D:

EXIT

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...