Gå til innhold

Anbefalte innlegg

Ja, det er fordi CHOICE ikke lengre er en gyldig kommando i CMD/Windows XP slik jeg sa tidligere, slik at den vil bare hoppe over det.

Men man kan laste ned choice.exe som er inkludert i Win2K Resource Kit:

 

Yes, but problem is, choice.exe is not included with NT, it is however part of NT4 resource kit.

 

in any case if u dont have the resource kit you can download choice.exe from here http://www.dynawell.com/support/ResKit/winnt.asp

 

and this site has some examples on how to use it:

 

http://www.tburke.net/info/reskittools/topics/choice.htm

 

and please, i dont want anyone whining piracy! beacuse i posted a link to download a tool in the nt4 resource kit.

 

Edit: Du kan også prøve dette:

pulp makes a good point. If you don't want to include choice.exe, you could use the new SET /P argument like so:

 

 

:START

set /P foovar=Answer Y or N:

if {foovar}=={Y} goto :Y

if {foovar}=={N} goto :N

echo You didn't do it right, let's try again.

goto :START

 

:Y

echo You answered Y!

rem other stuff here

goto :eof

 

:N

echo You answered N!

rem other stuff here

goto :eof

 

 

 

The SET /P argument is available on Win2k and XP, but not on older systems.

Kilde.

Endret av skag1
Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+142

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

7305636[/snapback]

vel, siden dette da er en bruker-guide..

hva vil "IF ERRORLEVEL 1" si?

Lenke til kommentar

Hvert alternativ vil gi ifra seg en errorlevel-verdi. Ved å sjekke hvilken errorlevel-verdi som er blitt satt, kan man finne ut hvilket alternativ brukeren valgte, og utføre nye handlinger ut ifra disse (f.eks GOTO :B).

 

Men har nå funnet en annen, kanskje mer elegant måte å gjøre valg på!

Jeg kaller demonstrasjonsprogrammet mitt for multi-defrag tool, hvor man kan sette opp en liste av opp til 9 disker som defragmenteres i tur og orden. Man kan bruke parametre for å spesifisere direkte hvilke disker som skal defragmenteres, samt rekkefølgen, eller bare skrive MDEFRAG for å få en guidet modus med GUI og greier :)

Har også hjelp-parametre, slik som f.eks "-h", "-?", "/h" og "/?".

 

Siden denne batchen ble på 323 linjer (!), som i stor grad skyldes GUI'et i guidet modus, velger jeg å vise koden i spoiler.

 

@ECHO OFF
CLS
SET OPT1=
SET OPT2=
SET OPT3=
SET OPT4=
SET OPT5=
SET OPT6=
SET OPT7=
SET OPT8=
SET OPT9=
IF "%1"=="" GOTO :SETOPT1
IF "%1"=="/?" GOTO :HELP
IF /I "%1"=="/h" GOTO :HELP
IF "%1"=="-?" GOTO :HELP
IF /I "%1"=="-h" GOTO :HELP
IF NOT "%1"=="" SET OPT1=%1
IF NOT "%2"=="" SET OPT2=%2
IF NOT "%3"=="" SET OPT3=%3
IF NOT "%4"=="" SET OPT4=%4
IF NOT "%5"=="" SET OPT5=%5
IF NOT "%6"=="" SET OPT6=%6
IF NOT "%7"=="" SET OPT7=%7
IF NOT "%8"=="" SET OPT8=%8
IF NOT "%9"=="" SET OPT9=%9
GOTO :DEFRAG1

:HELP
ECHO.
ECHO  MDEFRAG - Multi-Defrag tool by skag1
ECHO  _____________________________________________________________________
ECHO.
ECHO.
ECHO  If no input is specified, you will be prompted with a guided mode for
ECHO  selecting which disk(s) to defrag in sequense.
ECHO.
ECHO  You can also specify drive letters seperated by space directly,
ECHO  as shown with this example:
ECHO.
ECHO  Example of defragmenting drive C:, E: and G: in sequense:
ECHO.
ECHO  MDEFRAG C E G
ECHO.
ECHO.
GOTO :END

:SETOPT1
CLS
ECHO.
ECHO  MDEFRAG - Multi-Defrag tool by skag1
ECHO  _____________________________________________________________________
ECHO.
ECHO.
ECHO  Inputting X = Cancel/return to console.
ECHO  Pressing enter with blank/no input = execute/start defrag sequense.
ECHO.
ECHO  Current defrag sequense:
ECHO.
ECHO  Disk 1: None
ECHO.
ECHO.
SET /P OPT1=Specify first drive in defrag sequense by letter only:
IF /I "%OPT1%"=="X" GOTO :CANCEL
IF "%OPT1%"=="" GOTO :NODEFRAG
GOTO :SETOPT2

:SETOPT2
CLS
ECHO.
ECHO  MDEFRAG - Multi-Defrag tool by skag1
ECHO  _____________________________________________________________________
ECHO.
ECHO.
ECHO  Inputting X = Cancel/return to console.
ECHO  Pressing enter with blank/no input = execute/start defrag sequense.
ECHO.
ECHO  Current defrag sequense:
ECHO.
ECHO  Disk 1: %OPT1%:/
ECHO.
ECHO.
SET /P OPT2=Specify second drive in defrag sequense by letter only:
IF /I "%OPT2%"=="X" GOTO :CANCEL
IF "%OPT2%"=="" GOTO :DEFRAG1
GOTO :SETOPT3

:SETOPT3
CLS
ECHO.
ECHO  MDEFRAG - Multi-Defrag tool by skag1
ECHO  _____________________________________________________________________
ECHO.
ECHO.
ECHO  Inputting X = Cancel/return to console.
ECHO  Pressing enter with blank/no input = execute/start defrag sequense.
ECHO.
ECHO  Current defrag sequense:
ECHO.
ECHO  Disk 1: %OPT1%:/
ECHO  Disk 2: %OPT2%:/
ECHO.
ECHO.
SET /P OPT3=Specify third drive in defrag sequense by letter only:
IF /I "%OPT3%"=="X" GOTO :CANCEL
IF "%OPT3%"=="" GOTO :DEFRAG1
GOTO :SETOPT4

:SETOPT4
CLS
ECHO.
ECHO  MDEFRAG - Multi-Defrag tool by skag1
ECHO  _____________________________________________________________________
ECHO.
ECHO.
ECHO  Inputting X = Cancel/return to console.
ECHO  Pressing enter with blank/no input = execute/start defrag sequense.
ECHO.
ECHO  Current defrag sequense:
ECHO.
ECHO  Disk 1: %OPT1%:/
ECHO  Disk 2: %OPT2%:/
ECHO  Disk 3: %OPT3%:/
ECHO.
ECHO.
SET /P OPT4=Specify forth drive in defrag sequense by letter only:
IF /I "%OPT4%"=="X" GOTO :CANCEL
IF "%OPT4%"=="" GOTO :DEFRAG1
GOTO :SETOPT5

:SETOPT5
CLS
ECHO.
ECHO  MDEFRAG - Multi-Defrag tool by skag1
ECHO  _____________________________________________________________________
ECHO.
ECHO.
ECHO  Inputting X = Cancel/return to console.
ECHO  Pressing enter with blank/no input = execute/start defrag sequense.
ECHO.
ECHO  Current defrag sequense:
ECHO.
ECHO  Disk 1: %OPT1%:/
ECHO  Disk 2: %OPT2%:/
ECHO  Disk 3: %OPT3%:/
ECHO  Disk 4: %OPT4%:/
ECHO.
ECHO.
SET /P OPT5=Specify fifth drive in defrag sequense by letter only:
IF /I "%OPT5%"=="X" GOTO :CANCEL
IF "%OPT5%"=="" GOTO :DEFRAG1
GOTO :SETOPT6

:SETOPT6
CLS
ECHO.
ECHO  MDEFRAG - Multi-Defrag tool by skag1
ECHO  _____________________________________________________________________
ECHO.
ECHO.
ECHO  Inputting X = Cancel/return to console.
ECHO  Pressing enter with blank/no input = execute/start defrag sequense.
ECHO.
ECHO  Current defrag sequense:
ECHO.
ECHO  Disk 1: %OPT1%:/
ECHO  Disk 2: %OPT2%:/
ECHO  Disk 3: %OPT3%:/
ECHO  Disk 4: %OPT4%:/
ECHO  Disk 5: %OPT5%:/
ECHO.
ECHO.
SET /P OPT6=Specify sixth drive in defrag sequense by letter only:
IF /I "%OPT6%"=="X" GOTO :CANCEL
IF "%OPT6%"=="" GOTO :DEFRAG1
GOTO :SETOPT7

:SETOPT7
CLS
ECHO.
ECHO  MDEFRAG - Multi-Defrag tool by skag1
ECHO  _____________________________________________________________________
ECHO.
ECHO.
ECHO  Inputting X = Cancel/return to console.
ECHO  Pressing enter with blank/no input = execute/start defrag sequense.
ECHO.
ECHO  Current defrag sequense:
ECHO.
ECHO  Disk 1: %OPT1%:/
ECHO  Disk 2: %OPT2%:/
ECHO  Disk 3: %OPT3%:/
ECHO  Disk 4: %OPT4%:/
ECHO  Disk 5: %OPT5%:/
ECHO  Disk 6: %OPT6%:/
ECHO.
ECHO.
SET /P OPT7=Specify seventh drive in defrag sequense by letter only:
IF /I "%OPT7%"=="X" GOTO :CANCEL
IF "%OPT7%"=="" GOTO :DEFRAG1
GOTO :SETOPT8

:SETOPT8
CLS
ECHO.
ECHO  MDEFRAG - Multi-Defrag tool by skag1
ECHO  _____________________________________________________________________
ECHO.
ECHO.
ECHO  Inputting X = Cancel/return to console.
ECHO  Pressing enter with blank/no input = execute/start defrag sequense.
ECHO.
ECHO  Current defrag sequense:
ECHO.
ECHO  Disk 1: %OPT1%:/
ECHO  Disk 2: %OPT2%:/
ECHO  Disk 3: %OPT3%:/
ECHO  Disk 4: %OPT4%:/
ECHO  Disk 5: %OPT5%:/
ECHO  Disk 6: %OPT6%:/
ECHO  Disk 7: %OPT7%:/
ECHO.
ECHO.
SET /P OPT8=Specify eighth drive in defrag sequense by letter only:
IF /I "%OPT8%"=="X" GOTO :CANCEL
IF "%OPT8%"=="" GOTO :DEFRAG1
GOTO :SETOPT9

:SETOPT9
CLS
ECHO.
ECHO  MDEFRAG - Multi-Defrag tool by skag1
ECHO  _____________________________________________________________________
ECHO.
ECHO.
ECHO  Inputting X = Cancel/return to console.
ECHO  Pressing enter with blank/no input = execute/start defrag sequense.
ECHO.
ECHO  Current defrag sequense:
ECHO.
ECHO  Disk 1: %OPT1%:/
ECHO  Disk 2: %OPT2%:/
ECHO  Disk 3: %OPT3%:/
ECHO  Disk 4: %OPT4%:/
ECHO  Disk 5: %OPT5%:/
ECHO  Disk 6: %OPT6%:/
ECHO  Disk 7: %OPT7%:/
ECHO  Disk 8: %OPT8%:/
ECHO.
ECHO.
SET /P OPT9=Specify last (nineth) drive in defrag sequense by letter only:
IF /I "%OPT9%"=="X" GOTO :CANCEL
GOTO :DEFRAG1

:DEFRAG1
IF "%OPT1%"=="" GOTO :NODEFRAG
ECHO DEFRAG %OPT1%:
GOTO :DEFRAG2

:DEFRAG2
IF "%OPT2%"=="" GOTO :END
ECHO DEFRAG %OPT2%:
GOTO :DEFRAG3

:DEFRAG3
IF "%OPT3%"=="" GOTO :END
ECHO DEFRAG %OPT3%:
GOTO :DEFRAG4

:DEFRAG4
IF "%OPT4%"=="" GOTO :END
ECHO DEFRAG %OPT4%:
GOTO :DEFRAG5

:DEFRAG5
IF "%OPT5%"=="" GOTO :END
ECHO DEFRAG %OPT5%:
GOTO :DEFRAG6

:DEFRAG6
IF "%OPT6%"=="" GOTO :END
ECHO DEFRAG %OPT6%:
GOTO :DEFRAG7

:DEFRAG7
IF "%OPT7%"=="" GOTO :END
ECHO DEFRAG %OPT7%:
GOTO :DEFRAG8

:DEFRAG8
IF "%OPT8%"=="" GOTO :END
ECHO DEFRAG %OPT8%:
GOTO :DEFRAG9

:DEFRAG9
IF "%OPT9%"=="" GOTO :END
ECHO DEFRAG %OPT9%:
GOTO :END

:CANCEL
CLS
ECHO.
ECHO  MDEFRAG - Multi-Defrag tool by skag1
ECHO  _____________________________________________________________________
ECHO.
ECHO.
ECHO  Operation aborted: Canceled by user.
ECHO.
ECHO.
GOTO :END

:NODEFRAG
CLS
ECHO.
ECHO  MDEFRAG - Multi-Defrag tool by skag1
ECHO  _____________________________________________________________________
ECHO.
ECHO.
ECHO  Error: No drive letter(s) specified: No disk(s) to defrag.
ECHO.
ECHO.
GOTO :END

:END

 

 

 

Kopier/lim inn i MDEFRAG.BAT dersom dere vil teste eller bruke programmet.

 

MERK: Batchen vil ikke utføre noen handliger, men istedet vise (ECHO) hvilken handling den ville ha foretatt. Om noen vil at batchen faktisk skal gjøre de handlingene den viser, er det bare å fjerne ECHO før hver DEFRAG-kommando.

Lenke til kommentar

Sånn litt off-topic; det scriptet der kunne vært laget mye lettere og mer effektivt med f.eks. skriptspråket Python som er mye mer avansert enn batch, og også et ordentlig programmeringsspråk. Ikke for å rakke ned på scriptene her, men man gjør ofte ting alt for undøvendig tungvinte med batch :/

Lenke til kommentar
Python er mye vanskligere å lære, men mye mer effektivt. Med batch er det dessverre omvendt :(  Jeg personlig liker Basic, og skal nå snart begynne å lære meg c++...

Men nå må vi ikke komme off-topic :whistle:

7306851[/snapback]

 

Det grunnleggende i Python (på samme nivå som i batch) er omtrent like lett å lære. I tillegg har Python maaaange ganger flere muligheter -- og når man først kan grunnspråket, kan man lære seg mange nye ting.

Lenke til kommentar
Sånn litt off-topic; det scriptet der kunne vært laget mye lettere og mer effektivt med f.eks. skriptspråket Python som er mye mer avansert enn batch, og også et ordentlig programmeringsspråk. Ikke for å rakke ned på scriptene her, men man gjør ofte ting alt for undøvendig tungvinte med batch :/

7306679[/snapback]

Du har misforstått. Batch har aldri vært et programmeringsspråk, eller noe som helst i nærheten. Opprinnelig ble det utviklet for å kunne scripte de grunnleggende kommandoene i MS-DOS, slik at man kunne f.eks automatisere repeterende oppgaver, istedetfor å sitte å skrive disse manuelt i DOS.

 

Å sammenligne batch med Python blir som å sammenligne spiker med spyd.

Endret av skag1
Lenke til kommentar
Sånn litt off-topic; det scriptet der kunne vært laget mye lettere og mer effektivt med f.eks. skriptspråket Python som er mye mer avansert enn batch, og også et ordentlig programmeringsspråk. Ikke for å rakke ned på scriptene her, men man gjør ofte ting alt for undøvendig tungvinte med batch :/

7306679[/snapback]

Du har misforstått. Batch har aldri vært et programmeringsspråk, eller noe som helst i nærheten. Opprinnelig ble det utviklet for å kunne scripte de grunnleggende kommandoene i MS-DOS, slik at man kunne f.eks automatisere repeterende oppgaver, istedetfor å sitte å skrive disse manuelt i DOS.

 

Å sammenligne batch med Python blir som å sammenligne spiker med spyd.

7308184[/snapback]

 

Og akkurat hvor fikk du det for deg at jeg kaller batch for et programmeringsspråk?

 

Det eneste jeg sa, var at scriptet ditt var unødvendig repeterende og langt, og kunne vært gjort raskere i f.eks. Python.

Lenke til kommentar

Av det faktum at du sammenligner Python, som du kaller for et ordentlig programmeringsspråk, med batch. Med mindre du anser batch som programmeringsspråk, har jeg vansker med å forstå hvordan, og på hvilket grunnlag, du kan sammenligne disse.

 

Batch vil alltid være MS-DOS på autopilot. Da sier det seg selv at man ikke får de samme mulighetene som med et ordentlig programmeringsspråk.

Lenke til kommentar
  • 3 uker senere...

Hei.

 

En nyttig sak for meg er et skript som starter opp en hel haug med services på pcen min som jeg normalt ikke trenger.

 

Årsak. Har installert BizTalk 2006, SQLServer 2005 osv lokalt på maskinen. Normalt jobber jeg på virtuelle images når jeg utvikler, men av og til har jeg bruk for å kunne fyre opp en løsning lokalt og derfor har jeg også installert de på laptopen min.

 

Uansett, for de som ikke har prøvd å installere BizTalk lokalt så kan jeg røpe at det drar "litt" ressurser" og ikke minst, er avhengig av en bråte andre prosesser som også må kjøre for å fungere. Resultatet er at pcen min bruker skrekkelig lang tid på boot, og allikevel er det ikke sikkert at alt kommer opp den først har bootet.

 

Løsningen er å sette alle normalt unødvendig Services sin Startup type til "Manual" og ganske enkelt kjøre et bat skript som starter alle disse servicene når jeg skal bruke de.

 

Det vil jeg si er en fornuftig bruk av denne typen funksjonalitet. Svært nyttig for meg iallefall.

 

@Echo off

cls

 

echo Starter SQL Server 2005

net start MSSQLSERVER

 

echo Starter SQL Serveragent

net start sqlserveragent

 

echo Starter SQL Server Integration Services

net start MsDtsServer

 

echo Starter Enterprise Single Sign-On

net start ENTSSO

 

Echo Starter BizTalk Base EDI service

net start EDI Subsystem

 

echo Starter BizTalk

net start BTSSVC$BizTalkServerApplication

 

echo Starter BizTalk RulesEngine

net start RulesEngine Update Service

 

pause

 

Edit: He he scriptet var feil :p

Endret av PålPot
Lenke til kommentar

@ECHO OFF
CLS
IF "%1"=="" GOTO :ERR
PING -n 1 -w 500 %1
IF ERRORLEVEL 1 GOTO :OFFLINE
ECHO.
ECHO.
ECHO  %1 is online and responding to ICMP Ping.
ECHO.
GOTO :EXIT

:OFFLINE
ECHO.
ECHO.
ECHO  %1 appears to be offline or not responding to ICMP Ping.
ECHO.
GOTO :EXIT

:ERR
CLS
ECHO.
ECHO.
ECHO  Error: No target IP adress specified.
ECHO.

:EXIT

 

Dersom du ikke vil ha detaljene fra PING (f.eks pingtider, etc) er det bare å putte inn en CLS (Clear Screen) kommando etter IF ERRORLEVEL-setningen og etter :OFFLINE-setningen, slik som under :ERR.

 

Hvis du vil ha en fast adresse å teste om du får svar fra kan du bytte ut %1 med adressen og fjerne den første IF-setningen som sjekker om det er oppgitt noen adresser, ellers må du oppgi adresse når du kjører batchfila. F.eks: pingchk 192.168.1.1

 

Merk at -w (timeout) er satt til 500 ms (0.5 sekund).

Endret av skag1
Lenke til kommentar

Vel, du forteller jo ikke akkurat veldig mye om hva du trenger da. Er vanskelig å gjette seg til at du skulle pinge mange maskiner og føre en liste over disse når du ikke nevner noe som helst om det.

 

Å få listet opp PC-navn er ikke mulig via CMD etter hva jeg vet.

Men det er fult mulig å lage en slik batch som sjekker om mange PC'er svarer og fører liste over disse, både som kommando med opp til 9 adresser oppgitt ved syntaksparametre eller faste adresser i selve batchen.

Lenke til kommentar

Noe sånt trenger addisjonsoperasjoner med variabler, noe jeg er usikker på går an med batch, selv om jeg tviler. Et annet stort problem er at dersom du skal IP-scanne store mengder IP'er vil det ta tid med ping, siden den vil vente på svar inntil timeout før den forsøker å kontakte en ny IP. Til slikt er ulumske (hacker) scannere kanskje bedre fordi disse kan gjøre addisjonsoperasjoner for å slippe å plotte inn 127^4 antall IP-adresser i koden, samt at slike programmer kan vente på flere maskiner samtidig.

 

f.eks, å skanne samtlige IP-adresser som er mulig med IPv4 og ha 100 ms timeout (0.1 sekund - eller 10 IP'er i sekundet om du vil), vil det ta 301 dager dersom jeg ikke har regnet feil.

Endret av skag1
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...