"Null reference exception"? no, grazie, prendo un "unexpected T_VARIABLE"... Questo è il forum per imparare l'arte della programmazione o per chiedere un parere su una sessione di debug particolarmente ostica.
Regole del forum Ricorda di indicare chiaramente nell'oggetto il linguaggio ([C#] oppure [PHP], [Java], [HTML], ...), se la discussione ne riguarda uno in particolare!
Ho bisogno di fare due cose tramite script cmd che si avvia in esecuzione automatica.
La prima, e più importante, è di modificare tramite notepad un file che ha una lettera accentata nel nome, quindi notepad turbolàb.ini e non riesco perché la lettera accentata viene interpretata in modo errato.
Non posso rinominare il file perché appartiene ad un programma, devo modificare una riga e inserire il nome del computer.
La seconda cosa è che vorrei mi chiedesse di inserire la descrizione del computer, quindi una variabile sempre diversa e l'andasse poi a salvare nel registro di configurazione al posto giusto.
Devo ancora cercare dove si trova nel registro, ma questa è una cosa secondaria per il momento.
Qualche idea?
In particolare per la prima cosa.
Grazie
“Se tutti i documenti raccontavano la stessa favola, ecco che la menzogna diventava un fatto storico, quindi vera.”
Ok va bene..per aprire il file nessun broblema..il vbs lo puoi lo puoi richiamare senza problemi dal tuo cmd
la questione è come fare il replace di DA_CAMBIARE che presumo assuma sempre un valore diverso. Se fosse sempre allo stessa riga ( ad esempio riaga 4 ) eventualmente si può pensare di riscrivere la strigna da codice nel senso che il vbs scriva direttamente WorkstationName=valore_da_scrivere
set objFSO = CreateObject( "Scripting.FileSystemObject" )
set objFile = objFSO.GetFile( "C:\temp\turbolàb.ini" )
If objFile.Size > 0 Then ' se il file è vuoto
ls_input = InputBox( "Inserisci il nome del computer:" ) ' casella per inserimento nome del pc
if ls_input > "" then
ls_new = ""
set objReadFile = objFSO.OpenTextFile( "C:\temp\turbolàb.ini", 1 ) ' apro il file in lettura
do until objReadFile.AtEndOfStream ' leggo riga per riga e metto in una stringa il nuovo output
ls_riga = objReadFile.ReadLine
if InStr( ls_riga, "WorkstationName" ) > 0 Then
ls_new = ls_new + "WorkstationName=" + ls_input + vbcrlf
else
ls_new = ls_new + ls_riga + vbcrlf
end if
loop
objReadFile.Close ' chiudo il file
set objWriteFile = objFSO.OpenTextFile( "C:\temp\turbolàb.ini", 2 ) ' riapro il file e ci scrivo il nuovo output
objWriteFile.write( ls_new )
objWriteFile.close
else
Wscript.Echo "Nome del computer non inserito!"
end if
Else
Wscript.Echo "Il file è vuoto"
End If
Se volessi ripetere il ciclo If ls_input > "" then più volte per tutti i file che devo modificare è una cosa fattibile?
Invece di aprire più volte notepad a questo punto provo a modificarlo tramite questo script.
Nella riga qui sotto, il 2 tra parentesi indica dove deve inserire il nome del computer che ho scritto nel box?
set objWriteFile = objFSO.OpenTextFile( "C:\temp\turbolàb.ini", 2 ) ' riapro il file e ci scrivo il nuovo output
“Se tutti i documenti raccontavano la stessa favola, ecco che la menzogna diventava un fatto storico, quindi vera.”
crazy.cat ha scritto:
Se volessi ripetere il ciclo If ls_input > "" then più volte per tutti i file che devo modificare è una cosa fattibile?
Invece di aprire più volte notepad a questo punto provo a modificarlo tramite questo script.
Come avrai notato lo script apre un singolo file specificandolo nel codice. Bisogna eseguire lo script per ogni file. Ma qui mi devi dare altre info..ci sono solo file .ini nella cartella? hai un numero fisso di file ognuno con un nome specifico?
crazy.cat ha scritto:
Nella riga qui sotto, il 2 tra parentesi indica dove deve inserire il nome del computer che ho scritto nel box?
set objWriteFile = objFSO.OpenTextFile( "C:\temp\turbolàb.ini", 2 ) ' riapro il file e ci scrivo il nuovo output
Il gioco è il seguente:
1) Il file viene aperto una prima volta in lettura ( parametro 1 ) e letto riga per riga; man mano che leggo una riga mi salvo il suo contenuto in una variabie ls_new.
Es: se leggo "Questa è la prima riga" in ls_new ci sarà scritto "Questa è la prima riga"
Al secondo giro ci accodo quanto trovo nella seconda riga e via dicendo fino alla fine del file.
2) Quando trovo la riga con al suo interno la dicitura "WorkstationName=" invece di salvarmi in ls_new il contenuto originale della riga ci scrivo "WorkstationName=nome-del-compiter"
3) Così facendo quando ho letto tutte le righe dentro la variabile ls_new ho esattamente il testo "finito" che dovrà essere presente nel file ini.
4) Alla fine del giro apro il file in scrittura ( parametro 2 ) e ci sostituisco il contenuto con quanto presente dentro la variabile ls_new
Sono tutti file ini ma si trovano in diverse cartelle, ti rispondo in maniera più dettagliata domani così controllo anche in quali righe si trova la variabile da modificare.
Intanto grazie.
“Se tutti i documenti raccontavano la stessa favola, ecco che la menzogna diventava un fatto storico, quindi vera.”
I file da cambiare son 5, in 4 è sulla riga numero 2 e nell'ultimo alla riga 23. La variabile è sempre la stessa.
Uno è in una cartella pippo, due sono nella cartella pluto e altri due sono in una sottocartella di pluto.
Se ti faccio impazzire lascia stare.
“Se tutti i documenti raccontavano la stessa favola, ecco che la menzogna diventava un fatto storico, quindi vera.”
In che riga si trovano effettivamente non è un problema. Se sono sempre quei 5 file e sempre in quelle 3 cartelle facciamo una cosa ad hoc. Per lunedì dovrei riuscire a preparartelo..è troppo tardi?
I file sono sempre gli stessi e anche le cartelle.
Non ho nessuna fretta è solo per evitare una scocciatura di dover sempre aprire gli stessi file per fare le modifiche ogni volta che installo un pc nuovo.
“Se tutti i documenti raccontavano la stessa favola, ecco che la menzogna diventava un fatto storico, quindi vera.”
ls_file = "C:\pippo\turbolàb.ini"
setWorkstationName( ls_file )
ls_file = "C:\pluto\turbolàb.ini"
setWorkstationName( ls_file )
ls_file = "C:\pluto\turbolàb.ini"
setWorkstationName( ls_file )
ls_file = "C:\pluto\subfolder_1\turbolàb.ini"
setWorkstationName( ls_file )
ls_file = "C:\pluto\subfolder_1\turbolàb.ini"
setWorkstationName( ls_file )
' ==================================
' FUNZIONE DI AGGIORNAMENTO FILE
' ==================================
sub setWorkstationName( as_file )
set objFSO = CreateObject( "Scripting.FileSystemObject" )
set objFile = objFSO.GetFile( as_file )
if objFile.Size > 0 Then ' se il file è vuoto
ls_input = InputBox( "Inserisci il nome del computer:", "Modifica file " + as_file ) ' casella per inserimento nome del pc
if ls_input > "" then
ls_new = ""
set objReadFile = objFSO.OpenTextFile( as_file, 1 ) ' apro il file in lettura
do until objReadFile.AtendOfStream ' leggo riga per riga e metto in una stringa il nuovo output
ls_riga = objReadFile.ReadLine
if InStr( ls_riga, "WorkstationName" ) > 0 Then
ls_new = ls_new + "WorkstationName=" + ls_input + vbcrlf
else
ls_new = ls_new + ls_riga + vbcrlf
end if
loop
objReadFile.Close ' chiudo il file
set objWriteFile = objFSO.OpenTextFile( as_file, 2 ) ' riapro il file e ci scrivo il nuovo output
objWriteFile.write( ls_new )
objWriteFile.close
else
Wscript.Echo "Nome del computer non inserito!"
end if
else
Wscript.Echo "Il file è vuoto"
end if
end sub
ls_input = InputBox( "Inserisci il nome del computer:" ) ' casella per inserimento nome del pc
if ls_input > "" then
ls_file = "C:\pippo\turbolàb.ini"
setWorkstationName ls_file, ls_input
ls_file = "C:\pluto\turbolàb.ini"
setWorkstationName ls_file, ls_input
ls_file = "C:\pluto\turbolàb.ini"
setWorkstationName ls_file, ls_input
ls_file = "C:\pluto\subfolder_1\turbolàb.ini"
setWorkstationName ls_file, ls_input
ls_file = "C:\pluto\subfolder_1\turbolàb.ini"
setWorkstationName ls_file, ls_input
else
Wscript.Echo "Nome del computer non inserito!"
end if
' ==================================
' FUNZIONE DI AGGIORNAMENTO FILE
' ==================================
sub setWorkstationName( as_file, as_input )
set objFSO = CreateObject( "Scripting.FileSystemObject" )
set objFile = objFSO.GetFile( as_file )
if objFile.Size > 0 Then ' se il file è vuoto
ls_new = ""
set objReadFile = objFSO.OpenTextFile( as_file, 1 ) ' apro il file in lettura
do until objReadFile.AtendOfStream ' leggo riga per riga e metto in una stringa il nuovo output
ls_riga = objReadFile.ReadLine
if InStr( ls_riga, "WorkstationName" ) > 0 Then
ls_new = ls_new + "WorkstationName=" + as_input + vbcrlf
else
ls_new = ls_new + ls_riga + vbcrlf
end if
loop
objReadFile.Close ' chiudo il file
set objWriteFile = objFSO.OpenTextFile( as_file, 2 ) ' riapro il file e ci scrivo il nuovo output
objWriteFile.write( ls_new )
objWriteFile.close
else
Wscript.Echo "Il file è vuoto"
end if
end sub
rumez ha scritto:Ok perfetto. Sicuramente non sarà agevolissimo andarli a cercare in più cartelle però in qualche modo faremo
se hanno nomi differenti non basta aggiungere i loro percorsi alla variabile "path"? In quel modo nel codice potresti omettere le directory in cui si trovano
Inserendo un messaggio, dichiari di aver letto e accettato il regolamento di partecipazione.
Nello specifico, sei consapevole che ti stai assumendo personalmente la totale responsabilità delle tue affermazioni, anche in sede civile e/o penale,
manlevando i gestori di questo sito da ogni coinvolgimento e/o pretesa di rivalsa.
Dichiari inoltre di essere consapevole che il messaggio sarà visibile pubblicamente, accetti di diffonderlo con licenza
CC BY-NC-SA 3.0 (con attribuzione a "TurboLab.it") e rinunci ad ogni forma di compensazione (economica o altro).
Rinunci inoltre esplicitamente a qualsiasi pretesa di cancellazione del messaggio.