Pagina 1 di 1
[script cmd] Editare file e inserimento variabile registro
Inviato: gio mag 09, 2013 9:56 am
da crazy.cat
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
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: gio mag 09, 2013 10:29 am
da rumez
va bene anche in windows script host? la riga devi aggiungerla all'inizio? alla fine? al posto del testo presente?
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: gio mag 09, 2013 11:18 am
da crazy.cat
La riga è questa
WorkstationName=DA_CAMBIARE
Il Da_CAMBIARE deve prendere il nome computer, si trova nella seconda riga di quel file.
Se posso richiamare il vbs dal mio script cmd va benissimo.
Il cmd deve fare anche altre cose quindi non posso rinunciarci.
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: gio mag 09, 2013 11:24 am
da rumez
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
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: gio mag 09, 2013 11:55 am
da rumez
Prova così:
File vbs da richiamare nel tuo cmd. Ovviamente devi sistemare i percorsi del file ini
Codice: Seleziona tutto
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
Io l'ho provato con questo file di testo:
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: gio mag 09, 2013 1:44 pm
da hashcat
Venerdi' o Sabato provo a scrivere lo script in batch.
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: gio mag 09, 2013 4:44 pm
da crazy.cat
rumez ha scritto:Prova così:
E direi che già funziona molto bene.
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
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: gio mag 09, 2013 5:12 pm
da rumez
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
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: gio mag 09, 2013 8:05 pm
da crazy.cat
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.
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: gio mag 09, 2013 8:29 pm
da rumez
Ok perfetto. Sicuramente non sarà agevolissimo andarli a cercare in più cartelle però in qualche modo faremo
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: ven mag 10, 2013 12:30 pm
da crazy.cat
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.
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: ven mag 10, 2013 12:33 pm
da rumez
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?
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: ven mag 10, 2013 12:52 pm
da crazy.cat
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.
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: ven mag 10, 2013 2:10 pm
da rumez
E' stato più semplice del previsto. Ecco qui:
Codice: Seleziona tutto
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
La parte che ti interessa è questa:
Codice: Seleziona tutto
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 )
Praticamente puoi ripeterla quante volte vuoi. Basta che specifichi i percorsi dei file. Poi la funzione "setWorkstationName" fa tutto lei da sola.
Ora resta la scrittura nel registro..
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: ven mag 10, 2013 2:31 pm
da crazy.cat
Al posto di subfolder_1 devo mettere il nome esatto della cartella?
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: ven mag 10, 2013 2:38 pm
da rumez
esatto..per ogni file che devi modificare fai
e poi richiami la dicitura:
Io questa procedura l'ho messa 5 volte per adattarla al tuo caso..ma puoi eseguira quante volte vuoi..1, 10, 100
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: ven mag 10, 2013 3:38 pm
da crazy.cat
Funzionerebbe, però devo reinserire il nome del computer per 5 volte.
Non ne basterebbe una sola?
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: ven mag 10, 2013 4:37 pm
da rumez
perché pensavo che avesse una finalità diversa
se deve essere sempre lo stesso nome usa questo codice per creare il vbs:
Codice: Seleziona tutto
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
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: ven mag 10, 2013 7:05 pm
da crazy.cat
Funziona perfettamente.
Grazie
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: ven mag 10, 2013 8:11 pm
da rumez
Ottimo!
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: ven mag 10, 2013 9:36 pm
da Al3x
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
Re: [script cmd] Editare file e inserimento variabile regist
Inviato: sab mag 11, 2013 10:00 am
da rumez
si beh..volendo si può ottimizzare