Avatar billede omen Nybegynder
24. april 2003 - 03:58 Der er 11 kommentarer og
1 løsning

Batch programering

Jeg har en batch fil der laver lidt forskellige ting, og som indeholder f.eks

@echo off
echo Press any key to run file
pause
C:\Windows\System32\mspaint.exe

Men den virker kun til Windows XP, og nu vil jeg så ha at den fra start spørger mig, om jeg har XP eller 2000?

F.eks

Hvilket OS bruger du?
[1] XP
[2] 2000

Vælger jeg 1, så kører den det igennem jeg har skrevet ovenover, men vælger jeg 2 skipper den de linier og hopper videre til 2, hvor der så skal stå:

@echo off
echo Press any key to run file
pause
C:\Winnt\System32\mspaint.exe

Det er noget med goto, if osv, men kan sgu ikke huske hvordan man gør!

100 point til den som laver et eksempel, eller forklarer hvordan man gør!
På forhånd tak!
Avatar billede omen Nybegynder
24. april 2003 - 04:31 #1
Jeg fandt dette eksempel på nettet:

ECHO 1. MS-DOS Editor.
ECHO 2. MS-Windows. (default)
ECHO 3. Defrag the hard-drive.
ECHO 4. Quit.
CHOICE /C:1234 /N /T:2,5 Please choose a menu option.
IF ERRORLEVEL == 4 GOTO QUIT_MENU
IF ERRORLEVEL == 3 GOTO DEFRAG_HD
IF ERRORLEVEL == 2 GOTO RUN_WIN
IF ERRORLEVEL == 1 GOTO RUN_EDIT
:RUN_EDIT
CALL EDIT
:RUN_WIN
CALL WIN
:DEFRAG_HD
DEFRAG c:
:QUIT_MENU
ECHO Safe to switch off machine now...

Men da CHOICE ikke kan findes i nyere operativ systemer... så kan den ikke bruges? Mon det er den eneste måde det kan gøres på?
24. april 2003 - 04:40 #2
Det klarer du langt mere elegant med variablen %WINDIR%

@echo off
echo Press any key to run file
pause
%WINDIR%\System32\mspaint.exe

%WINDIR% indeholder navnet på den mappe Windows er installeret i - uanset om det er 95, 98, ME, 2k eller XP
Avatar billede omen Nybegynder
24. april 2003 - 04:43 #3
Ja udemærket... men desværre så indeholder den ikke rigtigt filer som skal køres som i mit eksempel! Der skal køres .reg filer, kopieres filer osv... så jeg SKAL bruge det jeg spørger om! Men ellers tak!
24. april 2003 - 05:19 #4
Prøv denne fil, der checker for eksistencen af winnt-mappen.

@echo off
echo Press any key to run file
pause

if exist C:\Winnt goto win2k

C:\Windows\System32\mspaint.exe
GOTO end

:win2k
C:\Winnt\System32\mspaint.exe

:end
Avatar billede omen Nybegynder
24. april 2003 - 05:24 #5
Nu er det sådan at jeg har en hel del faktorer der spiller, enten om det er et forskelligt OS. Den batch jeg har lavet, som kun virker til XP, kører den reg filer, commands, kopiere filer osv... og det eneste der er det samme om det er XP og 2000 er kun til command
24. april 2003 - 05:31 #6
Lidt uklart formuleret!

Du kan indsætte alle de kommandoer du har behov for:

@echo off
echo Press any key to run file
pause

if exist C:\Winnt goto win2k

C:\Windows\System32\mspaint.exe
x
x
x
GOTO end

:win2k
C:\Winnt\System32\mspaint.exe
x
x
x

:end
Avatar billede omen Nybegynder
24. april 2003 - 05:47 #7
Ja ved jeg ik lige skriver så tydeligt nu, men det er jo sent om morgenen :)

Men jeg SKAL bruge det hvor den spørger om noget, for jeg skal også lave det til Windows 2003 :(

Men hvis der var noget som kunne tjekke hvilken windows version man har ville det også være fint, for så kan jeg bruge dit eksempel!
Avatar billede omen Nybegynder
24. april 2003 - 06:52 #8
erikjuul: er du gået i seng?
24. april 2003 - 13:45 #9
Ja, jeg var gået i seng på det tidspunkt.

Men er nu på banen igen med en løsning, der aflæser Windows-versionen. Da der ikke er en environment-variable (som f.eks. %WinDir%), der aflæser Windows-versionen, måtte der en omvej over en søgning i output fra VER-kommandoen.

Jeg har medtaget samtlige versioner siden Windows95 af hensyn til andre, der måtte have brug for det. Du sletter bare det er ikke er nødvendigt for dig.

Jeg har medtaget Windows2003, men kender ikke det endelige navn herfor, så der må lige rettes lidt til den tid.

@ECHO OFF
VER|FIND "XP">NUL
IF NOT ERRORLEVEL 1 GOTO WinXP
VER|FIND "2000">NUL
IF NOT ERRORLEVEL 1 GOTO Win2K
VER|FIND "NT">NUL
IF NOT ERRORLEVEL 1 GOTO WinNT
VER|FIND "Mil">NUL
IF NOT ERRORLEVEL 1 GOTO WinME
VER|FIND "98">NUL
IF NOT ERRORLEVEL 1 GOTO Win98
VER|FIND "95">NUL
IF NOT ERRORLEVEL 1 GOTO Win95

VER|FIND "2003">NUL
IF NOT ERRORLEVEL 1 GOTO Win2k3

GOTO BADOS

:WinXP
ECHO WinXP
GOTO END

:Win2K
ECHO Win2K
GOTO END

:WinNT
ECHO WinNT
GOTO END

:WinME
ECHO WinME
GOTO END

:Win98
ECHO Win98
GOTO END

:Win95
ECHO Win95
GOTO END

:Win2k3
ECHO Windows2003 - eller hvad den nu kommer til at hedde!!!
GOTO END

:BADOS
ECHO Dette operativsystem genkendes ikke.
GOTO END

:END

For at undgå at batch-filen bliver alt for stor vil jeg anbefale at de generelle kommandoer, der skal udføres uanset operativsystem placeres først i felen. Linien ECHO... ved de forskellige Windows-versioner udskiftes med de respektive kommandoer for den pågældende version.

Håber det er forståeligt, og at det løser dit problem.
Avatar billede omen Nybegynder
24. april 2003 - 14:01 #10
Mange tak :)
Avatar billede omen Nybegynder
24. april 2003 - 14:03 #11
Læg et svar!

Og lige et side spørgsmål: Hvis man skal begynde at programere, bare lidt for sjov, nogle små Windows programmer der kan lave lidt om i registry osv... ved du et godt sted at begynde henne?
Avatar billede sjqlund Nybegynder
06. november 2003 - 13:19 #12
Set /P Choice=Vaalg nu hvilket spil du vil spille: %

IF %choice%'==1' START D:\Spil\Wolfenstein ET\ET.exe
IF %choice%'==2' START D:\Spil\Generals\Zero Hour\generals.exe
IF %choice%'==3' START D:\Spil\GTAvicecity\gta-vc.exe

Sådan bruger jeg det..
Lidt ECHO før det self
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester