Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - [Batch - WIN XP] Lettura di un file di testo
Forum - Altri Linguaggi - [Batch - WIN XP] Lettura di un file di testo

Avatar
teomangia (Normal User)
Newbie


Messaggi: 8
Iscritto: 17/03/2010

Segnala al moderatore
Postato alle 17:05
Mercoledì, 17/03/2010
Ciao.
Nel creare un file BATCH ho notato degli strani comportamenti all'interno di un ciclo FOR.
In particolare sto cercando di leggere l'ultima riga del file BOOT.INI:

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Home Edition" /fastdetect /NoExecute=OptIn

Se eseguo
for /f "delims= tokens=*" %%G in (%homedrive%\boot.ini) do call :sub_routine "%%~G"
nella sub_routine non riesco ad associare la riga intera al parametro %1 ma ottengo solo

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft

Notato questo comportamento anomalo, ho ovviato eliminando la chiamata alla sub_routine e specificando il contenuto della stessa tra parentesi, in questo modo:
for /f "delims= tokens=*" %%G in (%homedrive%\boot.ini) do (corpo sub_routine)

Adesso, con incredibile stupore noto che non mi incrementa più un contatore che utilizzo nel corpo della sub_routine.

Grazie.


PM Quote
Avatar
TheEngi (Ex-Member)
Pro


Messaggi: 145
Iscritto: 30/08/2009

Segnala al moderatore
Postato alle 18:04
Mercoledì, 17/03/2010
Prova così:

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft_Windows_XP_Home_Edition" /fastdetect /NoExecute=OptIn

non ho avuto modo di provarlo!

PM Quote
Avatar
teomangia (Normal User)
Newbie


Messaggi: 8
Iscritto: 17/03/2010

Segnala al moderatore
Postato alle 18:21
Mercoledì, 17/03/2010
Testo quotato

Postato originariamente da TheEngi:

Prova così:

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft_Windows_XP_Home_Edition" /fastdetect /NoExecute=OptIn

non ho avuto modo di provarlo!



Grazie innanzitutto per il tuo interessamento.
Scusa, forse non mi sono spiegato.
Devo leggere il file boot.ini e sostituire la seconda riga.
Quindi ho pensato di leggere il file riga per riga (non conosco un comando che sostituisca una riga specifica) ed alla seconda riga scriva il nuovo valore.

Codice sorgente - presumibilmente VB.NET

  1. IF EXIST boo2.ini DEL boo2.ini
  2. IF EXIST %homedrive%\boot.ini goto :procedi
  3. IF NOT EXIST %homedrive%\boot.ini goto :eof
  4.  
  5. :procedi
  6.  
  7. set /a _i=0
  8. set /P _appo=Inserisci il tempo di visualizzazione in secondi:
  9.  
  10. for /f "delims= tokens=*" %%G in (%homedrive%\boot.ini) do (call :eseguo "%%~G")
  11.  
  12. notepad boo2.ini
  13. exit
  14.  
  15.  
  16. :eseguo
  17. echo %1
  18. set /a _i=_i+1
  19. if not %_i%==2 echo %~1 >>boo2.ini
  20. if %_i%==2 echo timeout=%_appo% >> boo2.ini
  21. pause
  22. goto :eof



PM Quote
Avatar
teomangia (Normal User)
Newbie


Messaggi: 8
Iscritto: 17/03/2010

Segnala al moderatore
Postato alle 19:42
Mercoledì, 17/03/2010
Ho risolto in questo modo, ma proprio non ne sono convinto.
Lo inserisco ugualmente magari è utile a qualcuno.
Questo batch modifica il tempo di visualizzazione degli O.S. nel file boot.ini:

Codice sorgente - presumibilmente VB.NET

  1. echo off
  2.  
  3. setlocal
  4.  
  5. IF EXIST boo2.ini DEL boo2.ini
  6. IF EXIST %homedrive%\boot.ini goto :procedi
  7. IF NOT EXIST %homedrive%\boot.ini goto :eof
  8.  
  9. :procedi
  10. set /P _appo=Inserisci il tempo di visualizzazione in secondi:
  11. echo [boot loader] >>boo2.ini
  12. echo timeout=%_appo% >>boo2.ini
  13. for /f "skip=2 tokens=*" %%G in (%homedrive%\boot.ini) do echo %%G >> boo2.ini
  14. copy boo2.ini %homedrive%\boot.ini /Y
  15. endlocal
  16. exit



Secondo me è solo una scorciatoia, si accettano suggerimenti !

PM Quote