Precedente :: Successivo |
Autore |
Messaggio |
balubeto Dio minore
Registrato: 19/05/06 08:22 Messaggi: 757
|
Inviato: 08 Dic 2011 12:54 Oggetto: Trovare e sostituire una stringa in un file di testo |
|
|
CIAO
Devo creare due script (da includere in un file bat):
1) Uno che trova una determinata stringa in un file di testo in modo che venga sostituita con un'altra stringa.
2) Uno che trova una determinata stringa in un file di testo in modo che la sua intera riga venga sostituita con un'altra stringa.
Questi script devono funzionare su Windows 7 SP1 32/64 bit.
Quindi, come faccio a fare cio?
GRAZIE
CIAO |
|
Top |
|
|
ZapoTeX Dio maturo
Registrato: 04/06/04 16:18 Messaggi: 2627 Residenza: Universo conosciuto
|
Inviato: 08 Dic 2011 15:11 Oggetto: |
|
|
Crei un'applicazione di tipo "console" con Visual Basic 2010 Express (gratuito) e la lanci dal file .bat.
Non sono sicuro che da un file .bat tu abbia a disposizione delle librerie di funzioni per le stringhe sufficienti per il tuo scopo.
Vediamo gli esperti ti consigliano diversamente, ma io farei così. |
|
Top |
|
|
GrayWolf Dio maturo
Registrato: 03/07/05 16:24 Messaggi: 2325 Residenza: ... come frontiera i confini del mondo...
|
Inviato: 08 Dic 2011 17:53 Oggetto: Re: Trovare e sostituire una stringa in un file di testo |
|
|
balubeto ha scritto: | CIAO
Devo creare due script (da includere in un file bat):
1) Uno che trova una determinata stringa in un file di testo in modo che venga sostituita con un'altra stringa.
|
Codice: |
@echo off
REM -- Prepare the Command Processor --
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
::BatchSubstitude - parses a File line by line and replaces a substring"
::syntax: BatchSubstitude.bat OldStr NewStr File
:: OldStr [in] - string to be replaced
:: NewStr [in] - string to replace with
:: File [in] - file to be parsed
:$changed 20100115
:$source http://www.dostips.com
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
set "line=%%B"
if defined line (
call set "line=echo.%%line:%~1=%~2%%"
for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
) ELSE echo.
)
|
fonte
balubeto ha scritto: |
2) Uno che trova una determinata stringa in un file di testo in modo
che la sua intera riga venga sostituita con un'altra stringa.
|
per questo non credo si possa fare con un .bat
occorre uno script, [come suggerito da Zapo]
però è già possibile con VBScript [nativo nel sistema]
edit:
a meno tu non voglia cimentarti nella modifica del batch sopra esposto,
utilizzando un quarto parametro per la sostituzione dell'intera riga, ma a dire la verità, la vedo piuttosto dura |
|
Top |
|
|
balubeto Dio minore
Registrato: 19/05/06 08:22 Messaggi: 757
|
Inviato: 08 Dic 2011 19:59 Oggetto: |
|
|
Da quanto ho capito, il linguaggio batch non e` adatto a fare questi due script.
Mi potestri far vedere come si farebbero tali script in VBScript o PowerShell e come si fa a richiamarli da un file bat?
grazie
ciao |
|
Top |
|
|
GrayWolf Dio maturo
Registrato: 03/07/05 16:24 Messaggi: 2325 Residenza: ... come frontiera i confini del mondo...
|
Inviato: 09 Dic 2011 13:01 Oggetto: |
|
|
balubeto ha scritto: |
Da quanto ho capito, il linguaggio batch non e` adatto a fare questi due script.
|
lo script che ho postato risolve il primo problema:
.1 apri il blocco note
.2 copi/incolli tutto quello che è compreso nel blocco "codice"
.3 salvi con nome_che_vuoi.bat [consiglio: nome_che_vuoi = BatchSubstitude]
.4 lo poni nella cartella del file su cui effettuare le sostituzioni [consiglio: fatti una copia prima]
.5 lo esegui con la sintassi: nome_che_vuoi.bat "stringa DA sostituire" "stringa DI sostituzione" nome_del_file_in cui_effettuare _la_sostituzione.txt
NOTE:
.1 se il .bat è in una cartella diversa da quella in cui risiede il file di testo, nome_del_file_in cui_effettuare _la_sostituzione.txt deve essere preceduto dal suo percorso
.2 se il percorso contiene degli spazi deve essere racchiuso fra doppie virgolette
esempio, ipotizzando che:
.1 il .bat si chiamiBatchSubstitude.bat e sia nelle cartella C:\Batch
.2 il file su cui deve essere effettuata la sostituzione si chiami Prova.txt
.3 Prova.txt sia nella cartella: C:\Miei Files Di Testo
.4 Prova.txt contenga la stringa "Visualizza" da sostituire con "Esponi"
.5 dopo la creazione di BatchSubstitude.bat in C:\Batch
.6 dopo aver effettuato una copia di riserva di Prova.txt
.7 [in esegui] digiti: C:\Batch\BatchSubstitude.bat "Visualizza" "Esponi" "C:\Miei Files Di Testo.txt" rispettando spazi e doppie virgolette
Naturalmente C:\ può essere sostituito con qualsiasi unità:\Percorso
per il secondo problema:
.1 non è necessario scrivere uno script che richiami un .bat
.2 è lo script che deve farlo [lasciami il tempo di scriverlo]
|
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11582 Residenza: Tokelau
|
Inviato: 09 Dic 2011 13:45 Oggetto: |
|
|
potresti provare questo per il primo caso link e questo per il secondo link
|
|
Top |
|
|
GrayWolf Dio maturo
Registrato: 03/07/05 16:24 Messaggi: 2325 Residenza: ... come frontiera i confini del mondo...
|
Inviato: 11 Dic 2011 13:48 Oggetto: |
|
|
ecco qua:
Codice: |
'* VB Script Document
'*******************************************************************************
'* Descrizione : myFindAndSost
'* :
'* : Cerca in un file e sostituisce:
'* : - una stringa con un'altra
'* : oppure
'* : - un'intera riga, che contiene una stringa, con una stringa
'* :
'*---------------:--------------------------------------------------------------
' prototipo di lancio:
'
' myFindAndSost.vbs /from:"DA" /to:"A" /file"u:\path\file" [/line:sostLinea]
'
' il parametro /line: è facoltativo e il valore associato deve essere:
' 'true' o 'false' [senza virgolette]
' se true, TUTTA la linea è sostituita con il contenuto del
' parametro /to:
' se mancante è assunto false = sostituzione di parola
'*---------------:--------------------------------------------------------------
'* Versione : 1.0.0.0
'*---------------:--------------------------------------------------------------
'* Autore : GrayWolf
'*---------------:--------------------------------------------------------------
'* Date :
'* Creazione : [sabato 10 dicembre 2011 - 11.30.53]
'* Ult. Modifica : [domenica 11 dicembre 2011 - 06.33.52]
'*---------------:--------------------------------------------------------------
'* : Modifiche
'*---------------:--------------------------------------------------------------
'* vers. X.Y.Z.S :
'* dd/mm/yyyy :
'*---------------:--------------------------------------------------------------
'* : ///---///---///---///
'*---------------:--------------------------------------------------------------
'*******************************************************************************
option explicit
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-~-~-~
'* variabili globali
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-~-~-~
'* -------------------------------------
'* costanti
'* -------------------------------------
const g_sApiceSingolo = "'"
const g_sApiceDoppio = """"
const g_ForReading = 1
const g_ForWriting = 2
'* -------------------------------------
'* -------------------------------------
'* oggetti
'* -------------------------------------
'* diretti
'*--------------------------------------
dim g_oFSO '* File System Object
'*--------------------------------------
dim g_oRegExpr '* Regular Expression
'*--------------------------------------
dim g_oShell '* shell per esecuzione comandi
'*--------------------------------------
'* indiretti
'*--------------------------------------
dim g_oFolder '* oggetto cartella
'*--------------------------------------
dim g_oFiles '* insieme files
'*--------------------------------------
dim g_oFile '* oggeto file
'*--------------------------------------
dim g_oFileIN '* oggetto file originale
'*--------------------------------------
dim g_oFileOUT '* oggetto file modificato
'*--------------------------------------
'* -------------------------------------
'* -------------------------------------
'* stringhe/ variant
'* -------------------------------------
'* stringhe
'*--------------------------------------
dim g_sCmd '* comando per shell
'*--------------------------------------
dim g_sScriptFName '* percorso e nome script
'*--------------------------------------
dim g_sScriptDir '* percorso script
'*--------------------------------------
dim g_sScriptName '* nome script
'*--------------------------------------
dim g_sTmp1 '* generico: transito
'*--------------------------------------
dim g_sFileSost '* contenuto sostituito
'*--------------------------------------
'* variant
'*--------------------------------------
dim g_avTmp '* generico: transito
'*--------------------------------------
dim g_avPar '* matrice parametri nella commandline
'*--------------------------------------
'* -------------------------------------
'* -------------------------------------
'* numerici
'* -------------------------------------
'*--------------------------------------
'*--------------------------------------
'* -------------------------------------
'* -------------------------------------
'* segnali
'* -------------------------------------
'*--------------------------------------
dim g_bPrimaVolta '* prima esecuzione
'*--------------------------------------
dim g_bSostGlob '* segnala sostituzione effettuata
'*--------------------------------------
'* -------------------------------------
'* message box -------------------------
dim g_sMsg
dim g_iButt
dim g_lIco
dim g_sTit
'* input box
dim g_sRis
'* -------------------------------------
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-~-~-~
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-~-~-~
'* -~-~-~-~-~-~-~-~-~- MAINLINE PROGRAMMA ~-~-~-~-~-~-~-~-~-~--~-~-~-~-~-~
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-~-~-~
'*------------------------------
'* impostazioni e
'* allocazione di oggetti
'*------------------------------
inizioProgramma
'*------------------------------
'*------------------------------
'* rilevazione commandline
impostaParCmdLine
'*------------------------------
'*------------------------------
'* non si sono verificati errori
'*------------------------------
Trattamento
'*------------------------------
'*------------------------------
'* fine script
'*------------------------------
fineProgramma
'*------------------------------
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-~-~-~
'* -~-~-~-~-~-~-~-~-~- TERMINE MAINLINE PROGRAMMA ~-~-~-~-~-~-~-~-~-~--~-~-~-~
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-~-~-~
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-~-~-~
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-~-~-~
'* -~-~-~-~-~-~-~-~-~-~-~-~ SOTTOPROCEDURE -~-~-~-~-~-~-~-~-~-~-~--~-~-~-~-~-~
'* -~-~-~-~-~-~-~-~-~-~-~- E -~-~-~-~-~-~-~-~-~-~-~--~-~-~-~-~-
'* -~-~-~-~-~-~-~-~-~-~-~-~ FUNZIONI -~-~-~-~-~-~-~-~-~-~-~--~-~-~-~-~-~
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-~-~-~
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-~-~-~
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-~~-~-~-~-~--~-~-~-
'* INIZIO PROGRAMMA
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-~~-~-~-~-~--~-~-~-
Sub inizioProgramma
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
'* impostazionì
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
g_bPrimaVolta = true
g_sScriptFName = Wscript.ScriptFullName
g_sScriptDir = left(g_sScriptFName,instrrev(g_sScriptFName,"\"))
g_sScriptName = mid(g_sScriptFName,instrrev(g_sScriptFName,"\")+1)
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
'* alloca oggetti
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
set g_oShell = CreateObject("Wscript.Shell")
Set g_oRegExpr = CreateObject("vbscript.regexp")
set g_oFSO = CreateObject("Scripting.FileSystemObject")
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
end sub
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* TERMINE INIZIO PROGRAMMA
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* INIZIO impostaParCmdLine
'* imposta la matrice dei parametri
'* li rileva
'* li controlla
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
sub impostaParCmdLine()
'*------------------------------
'* imposta matrice dei parametri
'*------------------------------
redim g_avPar(2,3)
g_avPar(0,0) = "from"
g_avPar(1,0) = "o"
g_avPar(2,0) = ""
g_avPar(0,1) = "to"
g_avPar(1,1) = "o"
g_avPar(2,1) = ""
g_avPar(0,2) = "file"
g_avPar(1,2) = "o"
g_avPar(2,2) = ""
g_avPar(0,3) = "line"
g_avPar(1,3) = "f"
g_avPar(2,3) = ""
'* rileva
if not RilePar (g_avPar,true) then
fineProgramma
end if
'* -----------------------------
'*------------------------------
'* controlla
'*------------------------------
'* esistenza file
if not g_oFSO.FileExists(g_avPar(2,2)) then
g_sMsg = "Il file:" _
& string(2,vblf) _
& g_avPar(2,2) _
& string(2,vblf) _
& "NON ESISTE!!!"
g_lIco = vbcritical
g_sTit = "ERRORE"
msgbox g_sMsg,g_lIco,g_sTit
fineProgramma
end if
'* valore di line [facoltativo]
if len(g_avPar(2,3))= 0 then
'* applica il default
g_avPar(2,3) = false
else
g_avPar(2,3) = lcase(g_avPar(2,3))
if not g_avPar(2,3) = "true" and _
not g_avPar(2,3) = "false" then
g_sMsg = "Il parametro line" _
& string(2,vblf) _
& "deve essere true o false" _
& string(2,vblf) _
& "/line:true" _
& vblf _
& "oppure" _
& vblf _
& "/line:false"
g_lIco = vbcritical
g_sTit = "ERRORE"
msgbox g_sMsg,g_lIco,g_sTit
fineProgramma
end if
end if
end sub
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* TERMINE impostaParCmdLine
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* INIZIO Trattamento
'*
'* corpo dell'elaborazione
'*
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
sub Trattamento()
'*---------------------------------
dim sPercorso '* percorso del file origine
'*---------------------------------
dim sNomeFileBak '* nome del backup numerato
'*---------------------------------
dim sExt '* estensione del file origine
'*---------------------------------
dim iCountBak '* conta backups
'*---------------------------------
'* sceglie il trattamento
if g_avPar(2,3) then
'* sostituzione di tutta la linea
sostLine
else
'* sostituzione di 'parola'
sostWord
end if
'* verifica se avvenuta sostituzione
if g_bSostGlob then
sExt = g_ofso.GetExtensionName(g_avPar(2,2))
sNomeFileBak = replace(g_avPar(2,2),sExt,"bk")
sPercorso = g_oFSO.GetParentFolderName(g_avPar(2,2))
set g_oFolder = g_oFSO.GetFolder(sPercorso)
set g_oFiles= g_oFolder.Files
iCountBak = -1
for each g_oFile in g_oFiles
iCountBak = iCountBak + 1
if not g_oFSO.FileExists(sNomeFileBak & iCountBak) then
'* crea backup numerato
g_oFSO.CopyFile g_avpar(2,2),sNomeFileBak & iCountBak
set g_oFileOUT = g_oFSO.OpenTextFile(g_avPar(2,2),g_ForWriting,false,-2)
g_oFileOUT.Write g_sFileSost
g_oFileOUT.Close
exit for
end if
next
end if
end sub
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* TERMINE Trattamento
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* INIZIO sostWord
'* sostituzione di una stringa con un'altra
'*
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
sub sostWord()
'*-----------------------------------
dim sFileCont '* contenuto file originale
'*-----------------------------------
'* legge il file
Set g_oFileIN = g_oFSO.OpenTextFile(g_avPar(2,2), g_ForReading)
sFileCont = g_ofileIN.ReadAll
g_ofileIN.Close
'* effettua la sostituzione
Set g_oRegExpr = New RegExp
g_oRegExpr.Global = True
g_oRegExpr.IgnoreCase = true
g_oRegExpr.Pattern = g_avPar(2,0) & "\b"
if g_oRegExpr.Test(sFileCont) then
g_bSostGlob = true
g_sFileSost = g_oRegExpr.Replace(sFileCont,g_avPar(2,1))
end if
end sub
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* TERMINE impostaParCmdLine
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* INIZIO sostLine
'*
'* sostituzione dell'intera linea con una stringa
'*
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
sub sostLine()
'*---------------------------------
dim sLineCont '* linea originale
'*---------------------------------
dim sLineSost '* linea sostituita
'*---------------------------------
dim avFileCont '* vettore file
'*---------------------------------
dim s '* generico: scansione
'*---------------------------------
'* imposta
redim avFileCont(0)
Set g_oRegExpr = New RegExp
g_oRegExpr.Global = True
g_oRegExpr.IgnoreCase = true
g_oRegExpr.Pattern = g_avPar(2,0) & "\b"
'* legge il file
Set g_oFileIN = g_oFSO.OpenTextFile(g_avPar(2,2), g_ForReading)
'* lo trasforma in array
Do Until g_oFileIN.AtEndOfStream
sLineCont = g_oFileIN.Readline
redim preserve avFileCont(ubound(avFileCont)+1)
avFileCont(ubound(avFileCont)) = sLineCont
Loop
'* esamina
for s = 1 to ubound(avFileCont)
sLineCont = avFileCont(s)
if g_oRegExpr.Test(sLineCont) then
sLineSost = g_avPar(2,1)
avFileCont(s) = sLineSost
g_bSostGlob = true
end if
next
'* costruisce il file con sostituzioni
if g_bSostGlob then
'* la join non è possibile:
'* il vettore parte da 1
for s = 1 to ubound(avFileCont)
g_sFileSost = g_sFileSost _
& avFileCont(s) _
& vbnewline
next
end if
end sub
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* TERMINE sostLine
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* FINE PROGRAMMA
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
sub fineProgramma
'* disalloca tutti gli oggetti
set g_oShell = Nothing
set g_oFSO = Nothing
Set g_oRegExpr = nothing
'* chiude lo script
WScript.quit
end sub
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* TERMINE FINE PROGRAMMA
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* -~-~-~-~-~-~-~-~-~-~ -~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* -~-~-~-~-~-~-~-~-~ Funzioni di servizio -~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* -~-~-~-~-~-~-~-~-~-~ -~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* aggiunge funzionalità mancante in vbscript
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
Function IIF (expr, truepart, falsepart)
If expr then
IIF = truepart
Else
IIF = falsepart
End If
End Function
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* Rileva parametri in riga comando
'*
'* NOTE:
'* la proprietà Named permette l'dentificazione dei parametri
'* con la sintassi: /nome_parametro:valore
'* se valore contiene spazi dovrà essere racchiuso fra doppie virgolette
'*
'* IMPORTANTE: i parametri sono CASE INSENSITIVE
'*
'* ///---///---///---///
'*
'* la funzione restituisce falso se si sono verificati degli errori e
'* se Controllo = vero
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
function rilePar(avNamedPar,bCntrl)
'*
'*--------------------------------------
dim colNamedArguments '* insieme parametri in commandline
'*--------------------------------------
'*
'*--------------------------------------'
dim sItm '* nome del parametro
'*--------------------------------------'
dim sTmp '* generico: transito
'*--------------------------------------'
dim sElenco '* elenco errori
'*--------------------------------------'
'*
'*--------------------------------------'
dim iAN '* scansione dell'insieme di parametri
'*--------------------------------------'
'*
'*--------------------------------------'
dim bRet '* valore di ritorno della funzione:
'* true = OK
'* false = si sono verificati errori
'*--------------------------------------'
'* imposta per ok
bRet = true
'* rileva gli argomenti
set colNamedArguments = WScript.Arguments.Named
if not colNamedArguments.count = 0 then
for iAN = 0 to ubound(avNamedPar,2)
'* rileva il nome del parametro
sItm = avNamedPar(0,iAN)
'* rileva il valore del parametro
sTmp = colNamedArguments.Item(sItm)
avNamedPar(2,iAN) = sTmp
next
end if
if bCntrl then
'* effetua il controllo sugli obbligatori
sElenco = ""
for iAN = 0 to ubound(avNamedPar,2)
if ucase(avNamedPar(1,iAN)) = "O" then
if len(trim(avNamedPar(2,iAN))) = 0 then
sElenco = sElenco _
& avNamedPar(0,iAN) _
& vblf
end if
end if
next
'* controlla se si sono verificati errori
if len(sElenco) > 0 then
g_sMsg = "I seguenti parametri obbligatori" _
& string(2,vblf) _
& sElenco _
& string(2,vblf) _
& "sono MANCANTI"
g_lIco = vbCritical
g_sTit = "ERRORE"
msgbox g_sMsg,g_lIco,g_sTit
bRet = false
end if
end if
'* restituzione
rilePar = bRet
end function
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-~-~-~
'* -~-~-~-~-~-~-~-~ TERMINE SOTTOPROCEDURE E FUNZIONI ~-~-~-~-~-~-~--~-~-~-~-~-~
'* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--~-~-~-~-~-~
|
ISTRUZIONI
Descrizione
Lo script permette di effettuare:
.1 la sostituzione di una stringa cun un'altra
.2 la sostituzione di un'intera riga che contiene una stringa con una stringa
La scelta del tipo di servizio da svolgere è delegato a un paramentro in riga di lancio
A ogni esecuzione sullo stesso file è creato un file di backup numerato dell'originale
Creazione
.1 aprire blocco note
.2 copiare e incollare tutto il contenuto del blocco "Codice"
.3 salvare con estensione .vbs in una cartella a piacere
Esecuzione
myFindAndSost.vbs /from:"*1" /to:"*2" /file"*3" [/line:*4]
Lo script prevede tre parametri obbligatori e uno facoltativo
Il formato di ogni parametro è: /parametro:"valore"
Ogni parametro deve essere separato dai succevi con almeno uno spazio
Obbligatori
*1 /from: la stringa DA sostituire
*2 /to: la stringa DI sostituzione
*3 /file: unità:\percorso\nome_file
tutti racchiusi fra doppie virgolette
Facoltativi
*4 /line: è il discriminante del servizio:
se false la sostituzione avviene fra stringhe
se true tutta la riga che contiene il valore di /from: sarà sostituita con il valore di /to:
Esempi
Ipotizzando che:
.1 lo script sia stato memorizzato in c:\Script
.2 il testo da trattare sia presente in c:\Testi
.3 che mioTesto.txt contenga almeno una stringa Visualizza
l'esecuzione:
myFindAndSost.vbs /from:"Visualizza" /to:"Espone" /file:"c:\Testi\mioTesto.txt"
myFindAndSost.vbs /from:"Visualizza" /to:"Espone" /file:"c:\Testi\mioTesto.txt" /line:false
sostituirà "Visualizza" con "Espone",
ma NON: visualizzare o Visusalizzerà o Visualizzando
l'esecuzione:
myFindAndSost.vbs /from:"Visualizza" /to:"Espone" /file:"c:\Testi\mioTesto.txt" /line:true
sostituirà tutta la riga contenente "Visualizza" con Espone
Per delegare l'esecuzione a un .bat
creare un file con estensione .bat e con il seguente contenuto
Codice: |
@ECHO OFF
if "%4" == "" (set parline=false) else (set parline=true)
c:\Script\myFindAndSost.vbs /from:"%1" /to:"%2" /file:"%3" /line:parline
|
Ipotizzando che il .bat sia stato creato con il nome sost.bat in C:\Batch
il suo richiamo sarà:
per la sostitozione di parola
C:\Batch\sost.bat "Visualizza" "Espone" "c:\Testi\mioTesto.txt"
per la sostituzione di linea
C:\Batch\sost.bat "Visualizza" "Espone" "c:\Testi\mioTesto.txt" true
edit, note dell'ultim'ora
AVVERTENZE
La sostituzione NON sarà effettuata se:
nella stringa associata a /from: è compreso uno spazio finale
e
nel testo la stringa è seguita [senza lo spazio] da un 'a capo' o dalla tabulazione
[i caratteri non stampabili sono resi visibile da editori di testo come PsPad o NotePad++] |
|
Top |
|
|
ZapoTeX Dio maturo
Registrato: 04/06/04 16:18 Messaggi: 2627 Residenza: Universo conosciuto
|
Inviato: 11 Dic 2011 15:06 Oggetto: |
|
|
Wow... Non avevo idea che i batch files fossero così potenti e versatili. Grazie a GreyWolf e SverX, si impara sempre da voi! |
|
Top |
|
|
balubeto Dio minore
Registrato: 19/05/06 08:22 Messaggi: 757
|
Inviato: 11 Dic 2011 17:06 Oggetto: |
|
|
GRAZIE MILLE |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11582 Residenza: Tokelau
|
Inviato: 12 Dic 2011 10:41 Oggetto: |
|
|
Zapo: i batch di DOS in effetti non sono né potenti né versatili, quello che ha postato GreyWolf è un VBscript e io ho postato due link a due programmini (console application -> ovvero vanno chiamati da riga di comando) fatti apposta per fare il lavoro di ricerca sostituzione.
(a meno di motivi didattici) non vedo perché non usare un programma già fatto per effettuare il lavoro... |
|
Top |
|
|
ZapoTeX Dio maturo
Registrato: 04/06/04 16:18 Messaggi: 2627 Residenza: Universo conosciuto
|
Inviato: 12 Dic 2011 11:21 Oggetto: |
|
|
Grazie della spiegazione! |
|
Top |
|
|
passic Comune mortale
Registrato: 05/10/15 21:35 Messaggi: 1
|
Inviato: 05 Ott 2015 21:42 Oggetto: |
|
|
[quote="GrayWolf"]
[code]
@echo off
REM -- Prepare the Command Processor --
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
::BatchSubstitude - parses a File line by line and replaces a substring"
::syntax: BatchSubstitude.bat OldStr NewStr File
:: OldStr [in] - string to be replaced
:: NewStr [in] - string to replace with
:: File [in] - file to be parsed
:$changed 20100115
:$source http://www.dostips.com
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
set "line=%%B"
if defined line (
call set "line=echo.%%line:%~1=%~2%%"
for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
) ELSE echo.
)
[/code]
[/quote]
Ciao Greywolf,
questo codice qui sopra è proprio quello che stavo cercando.
Purtroppo però ho visto che scrive a video il contenuto del file mentre a me servirebbe che riversasse tutto il nuoovo contenuto in un nuovo file txt.
Per favore, sarebbe complicato modificarlo in tal senso?
E cioè che riempisse un nuovo file con il contenuto che mostra a video?
sarebbe molto utile per me, ho provato a fare qualche modifica ma il risultato è che poi non funziona nemmeno quello che hai fatto tu :p
grazie, se puoi
cordialmente
passic |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11582 Residenza: Tokelau
|
Inviato: 06 Ott 2015 08:57 Oggetto: |
|
|
puoi redirigere l'output di un file batch verso un file (invece che verso lo schermo) usando l'operatore di redirezione dell'output.
Ovvero, se il batch si chiama 'miobatch.bat' allora devi solo lanciare
Codice: | miobatch.bat > file.txt |
|
|
Top |
|
|
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|