Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [batch] errore nel choice

    questo è il mio codice
    codice:
    echo off
    cd ..\..\..\programmi\apache~1\apache
    
    echo Menù
    echo R - run
    echo S - stop
    echo A - restart
    
    Choice/c:[r,s,a]
    if errorlevel 3 goto restart
    if errorlevel 2 goto stop
    if errorlevel 1 goto run
    
    :restart
    apache -k restart
    
    :stop
    apache -k stop
    
    :run
    apache -k start
    eseguo su win 2000 service pack 4

    mi dà:
    codice:
    
    
    D:\Documents and Settings\Administrator\Desktop>echo off
    Men¨
    R - run
    S - stop
    A - restart
    "Choice" non è riconosciuto come comando interno o esterno,
     un programma eseguibile o un file batch.
    Cannot read apache PID file d:/programmi/apache group/apache/logs/httpd.pid
    Cannot read apache PID file d:/programmi/apache group/apache/logs/httpd.pid
    Apache/1.3.28 (Win32) running...
    
    e di conseguenza mi fa partire apache e basta...


    sono alle prime armi con i file batch ma dov'è l'errore??????

  2. #2
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    bella gatta da pelare...
    Ti informo che Choice in windows 2000 non esiste più, e che io sappia non ha un sostituto...

    L'unica soluzione che ho trovato è abbandonare completamente i file comandi classici e passare a WSH (Windows Scripting Host).
    Questo è un nuovo potentissimo interprete di comandi con il quale è possibile controllare qualsiasi aspetto di windows sia in modalità testuale da shell (interprete cscript) sia con intefaccia grafica-GUI (interprete wscript).
    Questo nuova modalità prevede una serie di oggetti e metodi di sistema che possono essere usati in un qualsiasi linguaggio di scripting come vbscript (vbs) o jscript (js).

    Suppongo tu sia digiuno di tali argomenti e forse per te la cosa risulterà un po' ostica ma secondo me ti ci abituera velocemente una volta scoperte le sue potenzialità.

    Un esempio di chiarirà un po' di cose.
    Per questo esempio uso vbscript.
    Copia il codice di sotto e salvalo per esmpio col nome "startapache.vbs"
    Per lanciarlo apri una finestra prompt dei comandi e digita

    codice:
    cscript startapache.vbs
    dovrebbe funzionare come hai indicato

    NB. attenzione se hai norton antivirus o un antivirus che blocca gli script pericolosi questo codice viene bloccato in attesa di una tua decisione. Puoi tranquillamente dirgli di eseguirlo. Questo è dovuto all'uso del metodo "Shell.Run" che a causa delle sue potenzialità puo' essere dannoso e usato come virus. Non è ovviamente il nostro caso.

    codice:
    Set objShell = Wscript.CreateObject("Wscript.Shell")
    
    objShell.CurrentDirectory ="..\..\..\programmi\apache~1\apache"
    
    runstr=""
    
    While (runstr="")
    
      Wscript.Echo ""
      Wscript.Echo "Menu"
      Wscript.Echo "R - run"
      Wscript.Echo "S - Stop"
      Wscript.Echo "A - restart"
      
      scelta = Left(Wscript.StdIn.ReadLine,1)
      
      Select Case LCase(scelta)
        Case "r"   runstr="apache -k start" 
        Case "s"   runstr="apache -k stop" 
        Case "a"   runstr="apache -k restart" 
      End Select
      
      If (runstr<>"") Then objShell.Run runstr
      
    Wend


    Come ho detto "cscript" è l'interprete di WSH da shell comandi.
    L'interprete di default è pero' "wscript".
    Per settare cscript come interprete di default digita:

    codice:
    cscript //H:cscript
    d'ora in poi ti basterà digitare semplicemete

    codice:
    startapache.vbs
    per lanciare il tuo script, oppure semplicemente fare doppio click sulla sua icona. Questo vale anche dopo il riavvio del sistema.

    Come puoi notare all'avvio del comando vengono stampate delle righe informative sull'interprete.
    Per eliminarle difinitivamente:

    codice:
    cscript //nologo //s
    Ok e ora un po' di spiegazioni sul codice:

    -riga 1: crea un oggetto "shell" che ci pemette di usare tanti metodi interessanti. Questo oggetto viene assegnato alla variabile oggetto "objShell" a cui faremo in seguito riferimento.

    -riga 2: usa il metodo "CurrentDirectory" dell'oggetto shell che equivale al vecchio CD del dos

    -riga 3: assegna una stringa nulla alla variabile "runstr" che conterrà il comando da esguire in base alla nostra scelta.

    -riga 4: questo è un comando vbscript. Un ciclo While in cui rimango finchè "runstr" è vuota, cioè finché non ho fatto una scelta valida.

    -riga 5-9: l'oggetto Wscript è aperto automaticamente e non è necessario settarlo come nel caso del sotto-oggetto Shell.
    Il metodo Echo di Wscript equivale a Echo del DOS: scrive su standard output

    -riga 10: un altro metodo dell'oggetto Wscript.
    "Wscript.StdIn.ReadLine" legge una riga da standard input e assegna la stringa alla variabile "scelta"

    -riga 11: la funzione vbscript "left(stringa,n)" preleva gli n caratteri più a sinistra della stringa. La funzione vbscript "LCase()" trasforma la stringa in minuscolo. Alla fine in scelta avremo solo il primo caratte in minuscolo.

    -riga 12: Select Case è un comando vbscript simile al Choice. Considero la variabile "scelta" e in base al suo valore assegno alla stringa "runstr" l'opportuno valore.

    riga 17: if () then , comando vbscript. Se "runstr" è diverso dalla stringa vuota allora uso il metodo Run dell'oggetto shell per eseguire il programma contenuto nella stringa "runstr".

    riga 18: Wend è il terminatore del While. A questo punto ritorno al while e rivaluto l'espressione. Se è valida (runstr="") rieseguo tutto perchè vuole dire che non ho fatto una scelta valida. altrimenti esco.



    infine un po di riferimenti:

    WSH:
    http://www.microsoft.com/technet/tre...s_wsh_crve.asp

    VBscript
    http://www.microsoft.com/technet/tre...s_vbs_dcot.asp


    direi che ora del materiale su cui lavorare ne hai abbastanza.
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  3. #3

    ho capito come funziona

    perchè cmq conosco un po' di pascal, c++ e php.
    sugli oggetti devo ancora abituarmi.
    cmq credo che il tuo aiuto mi sarà da spunto per iniziare una minima programmazione in vbs...
    grazie.
    ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    4
    set /p scelta=Seleziona opzione: (r,s,f)

    if "%scelta%"=="r" fai r...
    if "%scelta%"=="s" fai s...


    ecc...

  5. #5
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    [supersaibal]Originariamente inviato da $$$
    set /p scelta=Seleziona opzione: (r,s,f)

    if "%scelta%"=="r" fai r...
    if "%scelta%"=="s" fai s...


    ecc... [/supersaibal]


    esisteva una via più semplice...
    ...buono a sapersi!!
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    4
    [supersaibal]Originariamente inviato da Habanero
    esisteva una via più semplice...
    ...buono a sapersi!! [/supersaibal]

    ovviamente si dovrebbe fare con 1 accorgimento:


    dimenticavo: QUESTO FORMATO FUNZIONA
    SOLO CON LA FAMIGLIA NT!!!

    codice:
    @echo off
    
    echo 0) Esci..
    echo 1) Buttati dalla finestra...
    echo 2) Sparati...
    echo 3) Boh... non mi viene in mente nulla :)
    echo.
    
    :menu
    set /p scelta=Allora cosa vuoi fare? 
    if not defined scelta (
      echo Li mortacci tua... devi da sceglie!!!
      echo.
      goto menu
    )
    
    set scelta=%scelta:~0,1%
    if %scelta% gtr 3 (
      echo Ma che inserisci???
      echo.
      goto menu
    )
    
    goto risultato%scelta%
    
    
    :risultato0
    echo hai selezionato 0
    goto fine
    
    :risultato1
    echo hai selezionato 1
    goto fine
    
    :risultato2
    echo hai selezionato 2
    goto fine
    
    :risultato3
    echo hai selezionato 3
    
    
    :fine

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.