Oppure

Loading
17/03/10 16:05
teomangia
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.

aaa
17/03/10 17:04
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!
aaa
17/03/10 17:21
teomangia
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.

IF EXIST boo2.ini DEL boo2.ini
IF EXIST %homedrive%\boot.ini goto :procedi
IF NOT EXIST %homedrive%\boot.ini goto :eof

:procedi

set /a _i=0
set /P _appo=Inserisci il tempo di visualizzazione in secondi:

for /f "delims= tokens=*" %%G in (%homedrive%\boot.ini) do (call :eseguo "%%~G")

notepad boo2.ini
exit


:eseguo
echo %1
set /a _i=_i+1
if not %_i%==2 echo %~1 >>boo2.ini
if %_i%==2 echo timeout=%_appo% >> boo2.ini
pause
goto :eof


aaa
17/03/10 18:42
teomangia
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:

echo off

setlocal

IF EXIST boo2.ini DEL boo2.ini
IF EXIST %homedrive%\boot.ini goto :procedi
IF NOT EXIST %homedrive%\boot.ini goto :eof

:procedi
set /P _appo=Inserisci il tempo di visualizzazione in secondi:
echo [boot loader] >>boo2.ini
echo timeout=%_appo% >>boo2.ini
for /f "skip=2 tokens=*" %%G in (%homedrive%\boot.ini) do echo %%G >> boo2.ini
copy boo2.ini %homedrive%\boot.ini /Y
endlocal
exit


Secondo me è solo una scorciatoia, si accettano suggerimenti !
aaa