LooneyTune Skrevet 13. september 2006 Del Skrevet 13. september 2006 (endret) 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 19. oktober 2006 av LooneyTune Lenke til kommentar
Aalton Skrevet 18. oktober 2006 Del Skrevet 18. oktober 2006 Der var denne tråden godkjent Lenke til kommentar
Burned-Toast Skrevet 22. oktober 2006 Del Skrevet 22. oktober 2006 (endret) 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 Bruker vel ping kommandoen til sånt... Endret 22. oktober 2006 av Burned-Toast Lenke til kommentar
Jaffe Skrevet 22. oktober 2006 Del Skrevet 22. oktober 2006 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 Bruker vel ping kommandoen til sånt... 7123778[/snapback] Ping har ingenting med det å gjøre Ping er for å sende forespørsler til andre maskiner på nettverket/internett for å se om de svarer, etc. Lenke til kommentar
Burned-Toast Skrevet 22. oktober 2006 Del Skrevet 22. oktober 2006 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++. Lenke til kommentar
Jaffe Skrevet 22. oktober 2006 Del Skrevet 22. oktober 2006 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
LooneyTune Skrevet 23. oktober 2006 Forfatter Del Skrevet 23. oktober 2006 (endret) 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 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 23. oktober 2006 av LooneyTune Lenke til kommentar
Jaffe Skrevet 23. oktober 2006 Del Skrevet 23. oktober 2006 VB er da programmering. Men poenget mitt er at Python er like lett å lære, og har et mye større bruksområde og muligheter. Lenke til kommentar
LooneyTune Skrevet 24. oktober 2006 Forfatter Del Skrevet 24. oktober 2006 (endret) Kan godt være, kansje jeg skulle lære meg dette Edit: VB er da programmering. Mente vel mest at batch kansje ikke var progrmmering... Endret 24. oktober 2006 av LooneyTune Lenke til kommentar
Frosten Skrevet 14. november 2006 Del Skrevet 14. november 2006 Det som er synd er at veldig mange kommandoer man kunne bruke i DOS har forsvunnet med de senere Windows versjonene. Hadde det mye moro med batchfiler i gamle dager og laget installasjonsprogrammer og annet nyttig. Fin liten guide btw Lenke til kommentar
Skagen Skrevet 16. november 2006 Del Skrevet 16. november 2006 Ja, spesielt CHOICE-kommandoen var fin. Kunne lage masse fine grafiske menyer med valg og sånt Husker jeg laget en sinnsyk meny-batch som var på 16 kilobytes inkl. grafikk! if errorlevel 1 goto :end Lenke til kommentar
asdf9321asdf1234 Skrevet 16. november 2006 Del Skrevet 16. november 2006 (endret) 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 16. november 2006 av EivindF Lenke til kommentar
Skagen Skrevet 16. november 2006 Del Skrevet 16. november 2006 (endret) 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 16. november 2006 av skag1 Lenke til kommentar
asdf9321asdf1234 Skrevet 16. november 2006 Del Skrevet 16. november 2006 Dumme meg tenkte ikke på at "Program files" og "programfiler" får samme navn.. Takk Lenke til kommentar
Skagen Skrevet 16. november 2006 Del Skrevet 16. november 2006 Fungerte batchen jeg skrev? Lenke til kommentar
Thor. Skrevet 16. november 2006 Del Skrevet 16. november 2006 (endret) 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 16. november 2006 av Thor. Lenke til kommentar
Skagen Skrevet 16. november 2006 Del Skrevet 16. november 2006 (endret) Ah! %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 16. november 2006 av skag1 Lenke til kommentar
Thor. Skrevet 17. november 2006 Del Skrevet 17. november 2006 (endret) Ahh takker . Glemte helt kommandoen "CALL". EDIT: Hvordan kan choice brukes for å velge hvilke disker som skal defragmenteres? Altså alle på en liste så velger du for eksempel c, d og e Endret 17. november 2006 av Thor. Lenke til kommentar
Skagen Skrevet 17. november 2006 Del Skrevet 17. november 2006 Jeg lærte meg å bruke choice i 1996, så hukommelsen min kan være noe rusten akkurat her! 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 :A FORMAT A: EXIT :B FORMAT B: EXIT :C FORMAT C: EXIT FORMAT D: EXIT Lenke til kommentar
Thor. Skrevet 17. november 2006 Del Skrevet 17. november 2006 Da går det ikke. Den hoppet over choice og gikk rett til formater a: spørsmålet Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå