14/06/2025 - Oregon62 ha scritto:
ho la necessità, tramite script batch, di leggere il contenuto di un file Anagrafica.TXT
Ciao,
puoi fare tranquillamente quello che hai richiesto con semplici scripts di Windows...
in pratica quello che prima si scriveva in file batch .Bat, adesso si possono scivere con degli script.
Premessa :
- Anticamente si adoperavano i famosi .Bat (ereditati dal vecchio DOS)
- Sempre anticamente si adoperavano i VbScript (.Vbs). Ti sconsiglio di implementare i tuoi script con questo sistema in quanto a breve (pochi anni ancora) viene deprecato per le nuove versioni di S.O. Windows
- Ti consiglio di usare e di studiare gli script di PowerShell (.ps1), presenti nelle ultime versioni di Windows e in quelle immediatamente prossime.
- In generale... prestare sempre attenzione agli script, sono considerati dal S.O. e/o Antivirus come file “Pericolosi”. Provvedere ad eseguirli con le credenziali adeguate e previo concessione da parte degli Antivirus, ecc…
-
Come per tutti gli script del passato, anche PowerShell ha un suo linguaggio di programmazione, semplice ed essenziale e anche potente se si vuole.
In genere si usano gli script se non si vuole usare sistemi e ambienti di programmazione da installare nei propri PC.
-
Una volta creato lo script in .ps1, si può eseguire da riga di comando PowerShell oppure creare dello stesso un file eseguibile .exe che può essere posizionato e richiamare in una posizione qualsiasi del PC
Qui trovi la documentazione di Microsoft per Iniziare a studiare PowerShell, è molto semplice e si possono fare tantissime cose:
https://learn.microsoft.com/en-us/training/modules/script-with-powershell/
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scripts?view=powershell-7.5
https://learn.microsoft.com/en-us/powershell/scripting/windows-powershell/ise/how-to-write-and-run-scripts-in-the-windows-powershell-ise?view=powershell-7.5
https://learn.microsoft.com/en-us/powershell/
https://learn.microsoft.com/en-us/powershell/scripting/samples/sample-scripts-for-administration?view=powershell-7.5
-
Un semplicissimo esempio:
poniamo di avere un file .txt che contiene due stringhe. Nella prima stringa si ha un nome file e nella seconda stringa si ha il percorso (path) dove questo file si trova.
Le due stringhe sono separate da un separato ‘|’ (pipe).
Esempio:
- Nome del file : ReadmeFile.txt
- Contiene un solo record con questo testo : myfilePippo.log|c:\TestPs1
- Il file si trova nella cartella : C:\TestPs1
- Il file si chiama : myfilePippo.log
-
Poniamo di voler eseguire queste istruzioni:
- leggere il record contenuto nel file ReadmeFile.txt
- costruire una stringa con la fullPath che contiene il percorso e il nome del file da ricercare:
- C:\TestPs1\ myfilePippo.log
- ricercare se il file C:\TestPs1\ myfilePippo.log esiste su disco fisso:
- Se esiste eseguire un programma, in questo esempio viene eseguito la calcolatrice di Windows (Start-Process calc.exe)
- Se non esiste emettere un messaggio per l’utente che il file ricercato non è stato trovato
- Questo processo viene eseguito solo se esite il file dove reperire le informazioni di ricerca:
- Se il file source ReadmeFile.txt non esiste, emettere messaggio che avvisa l’utente per file non trovato
-
Per questo piccole e semplicissimo script, qui puoi trovare uno file zip con l’esempio sopra descritto:
https://drive.google.com/file/d/1X4Zvn1Cwj7Lkf-m1kSAhHfsqoAG1x9tF/view?usp=sharing
Il file Zip contiene:
- Una cartella per eseguire i test di nome C:\TestPs1 dove si trovano :
- ReadmeFile.txt – il file da leggere per reperire la fullPath del file da ricercare
- myfilePippo.log – il file che deve essere cercato se esiste oppure no
- Una sottocartella che contiene la documentazione per eseguire lo script .ps1 in riga di comando PowerShell :
- C:\TestPs1\Document\document.txt
- Una sottocartella che contiene lo script ps1 :
- C:\TestPs1\ScriptPs1\ MyPs1ExistsFile.ps1
- questo è lo script da eseguire da riga di comando PowerShell
- C:\TestPs1\ScriptPs1\ MyPs1ExistsFile.EXE
- questo è l’eseguibile che si può ottenere da PowerShell per poterlo eseguire direttamente senza dover aprire manualmente la riga di comando PowerShell
- Estrarre dal file Zip la cartella “TestPs1” e copiarla in “C:\”
-
Esempio di script PowherShell : MyPs1ExistsFile.ps1
# add .NET Windows Forms assembly to enable usage of MessageBox
Add-Type -AssemblyName System.Windows.Forms
# path of the file to read
$readmePath = "C:\TestPs1\ReadmeFile.txt"
if (Test-Path $readmePath) {
# read only the first line
$firstLine = Get-Content $readmePath -TotalCount 1
# split the line using the '|' character
$parts = $firstLine -split '\|'
# file name and file path
$fileName = $parts[0].Trim()
$filePath = $parts[1].Trim()
# combine to create the full file path
$fullPathSearch = Join-Path -Path $filePath -ChildPath $fileName
# check if the file exists
if (Test-Path $fullPathSearch) {
# file exists -> open calculator
Start-Process calc.exe
} else {
# file does not exist - show warning message box
[System.Windows.Forms.MessageBox]::Show("The file `"$fullPathSearch`" does not exist.", "Warning", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Warning)
}
} else {
# source file does not exist - show error message box with file path from variable
[System.Windows.Forms.MessageBox]::Show("The file `"$readmePath`" does not exist.", "Error", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
}
-
Per eseguire lo script ps1, seguire queste micro istruzioni:
- Per eseguire lo script ps1:
1) Open Powershell ed eseguire il comando:
& "C:\TestPs1\ScriptPs1\MyPs1ExistsFile.ps1"
- Per creare un eseguibile (.exe) per eseguire lo script ps1:
1) Open Powershell ed eseguire il comando:
Invoke-PS2EXE -InputFile "C:\TestPs1\ScriptPs1\MyPs1ExistsFile.ps1" -OutputFile "C:\TestPs1\ScriptPs1\MyPs1ExistsFile.exe"
- Se PS2EXE non esiste, installare il pacchetto da NuGet:
1) Open Powershell ed eseguire il comando:
Install-Module -Name ps2exe -Scope CurrentUser
-
Provare a cambiare il contenuto del file, i nomi dei file, le path, ecc… e fare tutti i test ed implementazioni che occorrono.
Se hai bisogno di ulteriori chiarimenti/spiegazioni, chiedi pure… comunque trovi tutto nella documentazione Microsoft di cui sopra ho riportato i link.