Programmazione in Batch

di il
18 risposte

Programmazione in Batch

Buongiorno,

ho la necessità, tramite script batch, di leggere il contenuto di un file Anagrafica.TXT (esattamente 2 colonne definite "Nome" e "Posizione") paraganonando il contenuto del "Nome" con il nome di un file. Se il nome del file è uguale a quello contenuto nel file Anagrafica.TXT e la sua posizione è uguale a "x" allora deve eseguire un programma altrimenti deve uscrire.

Quakcuno mi da un esempio da utilizzare o sui cui lavorare. Grazie.

18 Risposte

  • Re: Programmazione in Batch

    Il primo problema e' che "script batch" NON E' un linguaggio di programmazione 
    MA, 
    "script" indica semplicemente un file di test contenente dei comandi, e 
    "batch" indica semplicemente che vuoi utilizzare la "shell" di qualche sistema operativo, 
    MA 
    non e' dato sapere quale.

    Inoltre TUTTI i sistemi operativi mettono a disposizione DIVERSE shell: ad esempio in Windows hai "cmd", "Powershell" e "bash" per Windows, in Linux "bash", "sh", "zsh", ecc. Ovviamente c'e' ne' sono altre n-mila. Ma gia' solo scegliendo le piu' usate, ne hai 2 per Windows e 2 per Linux, in PIU c'e' ovviamente Mac OS!
    .

    A parte questo, in "teoria" si puo' fare MA in "pratica" e' generalmente piu' comodo scrivere un programmino in qualche linguaggio di programmazione che implementa la parte di lettura dei file.

    MA anche in questo caso, scrivere un programmino NON E' cosa che si fa stile "preparare un piatto di pasta Buitoni con tonno Riomare" che CHIUNQUE e' in grado di preparare. Serve installare il "runtime" del linguaggio di programmazione, i tool di sviluppo, configurare le variabili d'ambiente della shell, ecc....

    .

    Quindi, benche' la richiesta SEMBRI semplice, non lo e' affatto.

  • Re: Programmazione in Batch

    Sono d'accordo con Migliorabile, supponendo che tu voglia farlo con Cmd, è tremendamente scomodo e dipende molto da come è effettivamente organizzato il tuo file txt (parliamo di colonne ma in che senso?).

    Se non vuoi o puoi usare un linguaggio di programmazione tra quelli noti, potresti provare almeno ad usare un vbscript (.vbs) con cui puoi lavorare un po' meglio rispetto al batch.

  • Re: Programmazione in Batch

    Oltre che ringraziarvi per aver preso in considerazione il post mi scuso per la mia poco chiarezza e scarsa dialettica informatica.  Per completezza di informazione, parliamo di uno script . Bat (cmd) e io non sono un programmatore.  Comunque, il file .txt da leggere contiene "n" righe con 2 informazioni per riga da confrontare.  Se complicato con uno script in formato .bat vuol dire che devo desistere. Grazie comunque.

  • Re: Programmazione in Batch

    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.

  • Re: Programmazione in Batch

    Premesso che anch'io suggerirei di non usare uno script ma un piccolo programma magari scritto in C# di poche righe, semplice, moderno e supportato, faccio notare che PowerShell a volte risulta ostico mentre vbs, a volte, molto sbrigativo.

    La fase 2 della timeline della deprecation di vbs di Ms preve solo nel 2027 che la feature non sarà abilitata di default ma abilitata dall'utentr. La fase del ritiro completo è TBD ovvero ancora da definire in futuro.

  • Re: Programmazione in Batch

    14/06/2025 - Oregon62 ha scritto:

    ho la necessità, tramite script batch

    Ciao,

    N.B. 

    Quando vai a scaricare lo Zip che ti ho allegato nel post precedente, il tuo sistema potrebbe segnalarti che lo stesso è pericoloso e/o contiene Virus.

    Questi eventuali messaggi vengono emessi in quanto il file zip contiene degli script eseguibili e/o documentazioni con riferimento a dei link.

    Ovviamente il file zip non contiene nessun virus ed è sicuro.

    Ricordati sempre di verificare e sbloccare i file contenuti nello zip :
    Esempio : 

    1. flag su "Annulla Blocco"
    2. click su Applica
    3. click su OK
  • Re: Programmazione in Batch

    15/06/2025 - oregon ha scritto:

    Premesso che anch'io suggerirei di non usare uno script ma un piccolo programma magari scritto in C# di poche righe, semplice, moderno e supportato, faccio notare che PowerShell a volte risulta ostico mentre vbs, a volte, molto sbrigativo.

    La fase 2 della timeline della deprecation di vbs di Ms preve solo nel 2027 che la feature non sarà abilitata di default ma abilitata dall'utentr. La fase del ritiro completo è TBD ovvero ancora da definire in futuro.

    Quindi siccome ha due anni di vita conviene utilizzare il vbs ? ...direi proprio di no. Due/Tre anni passano alla svelta, rimanere agganciati ai vecchi sistemi non conviene mai, prima o dopo si avranno comunque problemi.

    Così come era ostico scrivere in .Bat lo era anche con .Vbs e allo stesso modo lo è per .ps1
    Non cambia proprio nulla, basta studiare e applicarsi.
    Ognuno deI tre script sopra citati richiedono la conosccenza del proprio linguaggio.
    Quindi come si è studiato il .Bat lo si è fatto anche per il .Vbs ,non esiste nessuna differenza nel studiare il .ps1 di PowerShell.

    Inoltre PowerShell offre tantissime utilità e istruzioni che prima non esistevano per il semplice fatto che i S.O. si sono nel tempo aggiornati.

    Infine la richiesta dell'OP era incentrata sull'esigenza di realizzare degli script.

    Scelta molto saggia se non si vuole installare un ambiente di programmazione e impare un liguaggio molto più complesso come per esempio c#. 

    Invece faccio notare che PowerShell è moderno, semplice e facile da utilizzare, proprio come lo erano i .Bat e i .Vbs del passto.

    Pertanto se si deve imparare a scrivere degli script è sicuramente meglio utilizzare in assoluto il sistema attuale che è PowerShell.

    Se poi non piace PowerShell si consiglia di scrivere a Microsoft con larichiesta di deprecarlo all'istante. Però questa è solo una questione molto molto molto soggettiva.

  • Re: Programmazione in Batch

    15/06/2025 - Oregon62 ha scritto:

     Se complicato con uno script in formato .bat vuol dire che devo desistere. Grazie comunque.

    Ciao,

    assolutamente NO !!! perchè desistere ?

    Come scrivevi in .Bat adesso scriverai in .ps1 PowerShell. 

    E'molto semplice. Sia dalla documentazione Microsoft che ti ho fornito  che dall'esempio che ti ho spiegato, nel giro di mezzagiornata, ti puoii impadronire del sistema PowerShell senza problemi.
    Occorre avere solo un pò di pazienza e provare con piccoli script per poi arrivare a fare qualsiasi cosa.

    All'inizio può sembrarti un ostacolo enorme, ma questo solo perchè non lo conosci. 
    Una volta appreso come fare, vedrai che è più semplice di quello che pensavi. 

    In più PowerShell è nativo in Windows di oggi, è moderno, è pienamente supportato, non devi installare nulla, non devi avere un ambiente di sviluppo softare di qualsiasi altro linguaggio. 
    Nel tuo caso per realizzare degli script è altamente consigliato.

  • Re: Programmazione in Batch

    15/06/2025 - Oregon62 ha scritto:

     Se complicato con uno script in formato .bat vuol dire che devo desistere. Grazie comunque.

    Ciao, 

    non voglio spingerti a utilizzare PowerShell, ovviamente la stessa cosa che ti ho postato in .ps1 si può fare benissimo anche con il buon vecchio .Bat

    Per esempio:

    @echo off
    REM set path of the file to read
    set "readmePath=C:\TestPs1\ReadmeFile.txt"
    
    REM check if ReadmeFile.txt exists
    if not exist "%readmePath%" (
        echo The file %readmePath% does not exist.
        pause
        exit /b
    )
    
    REM read the first line of the file
    for /f "usebackq tokens=1* delims=|" %%A in ("%readmePath%") do (
        set "fileName=%%A"
        set "filePath=%%B"
    )
    
    REM remove quotes and spaces
    set "fileName=%fileName:~0%"
    set "filePath=%filePath:~0%"
    
    REM combine path and filename
    set "fullPathSearch=%filePath%\%fileName%"
    
    REM check if the full file path exists
    if exist "%fullPathSearch%" (
        REM file exists - open calculator
        start calc.exe
    ) else (
        REM file does not exist -show message
        echo The file %fullPathSearch% does not exist.
        pause
    )
    

    -

    Personalmente non lo farei con i .Bat ... però tutto si può, fin quando non ci sono limiti si fa tutto.

  • Re: Programmazione in Batch

    Oregon62 (mio quasi omonimo) se il tuo obiettivo è avere del codice pronto all'uso allora lo hai avuto, non è stato molto istruttivo per te ma va beh che ci jmporta.

    Se il batch non ti convince perchè non lo hai compreso sappi che non è lo strumento giusto, è un consiglio che ti darei se volessi andare in monopattino da Roma ad Oslo, si può fare (tutto si può fare anche le cose stupide) ma non per questo ti consiglierei di usarlo.

    Se hai tempo e voglia, mettendo da parte gli script, prova ad imparare le basi di C# o VB.NET se preferisci e con poche linee di codice abbastanza chiare e semplici fai quello che hai chiesto... e molto di più. Buon lavoro

  • Re: Programmazione in Batch

    15/06/2025 - oregon ha scritto:

    se il tuo obiettivo è avere del codice pronto all'uso allora lo hai avuto, non è stato molto istruttivo per te ma va beh che ci jmporta.

    Adesso si supera il limite e si fa polemica in cose ASSOLUTAMENTE NON VERE !!!

    Prima di criticare e fare oseervazioni  fuori luogo, leggere attentamente i post per non fare le misere figuracce come sempre.

    NON HO ASSOLUTAMENTE DATO LA "Pappa pronta" .... leggere attentamente i post !!!!

    I miei esempi e spiegazioni e documentazioni sono generiche e non fanno esattamente quello che ha richiesto l'OP 
    Solo solo esempi di come poter fare talune cose. E'richiesto da parte dell'OP le dovute implementazioni prendendo spunto da tali esempi.

    Se l'OP copia e Incolla, pur modificando solo i nomi delle cartelle e dei files, non ottiene quello che esattamente vuole, ma ha solo una panoramica di istruzioni che indicano la fattibilità di quello che vuole fare. 

    Adesso sta all'OP di prendere spunto e scriversi il proprio script a suo piacimento con tutte le sue condizioni e regole.

    Tra le diverse cose, negli esempi, si può semplicemente segnalare che non vengono letti tutti i records del file source ma solo il primo... tanto per fare un esempio

    Denigrare la mia persona in questo modo, affermando il falso, solo  per il semplice fatto che in due non siete stati in grado di dare uno spunto o un esempio di cosa poter fare con degli script, è veramente vergognoso e intollerabile....   ma che schifo!!!

    Tanto è che avete portato l'OP a rispondere in questo modo:

     Se complicato con uno script in formato .bat vuol dire che devo desistere. Grazie comunque.

    Ma infatti non viene più nessuno in questo forum e in altri dove partecipate, data la vostra arroganza, supponenza e maleducazione! 

  • Re: Programmazione in Batch

    14/06/2025 - Oregon62 ha scritto:

    Buongiorno,

    ho la necessità, tramite script batch, di leggere il contenuto di un file Anagrafica.TXT (esattamente 2 colonne definite "Nome" e "Posizione") paraganonando il contenuto del "Nome" con il nome di un file. Se il nome del file è uguale a quello contenuto nel file Anagrafica.TXT e la sua posizione è uguale a "x" allora deve eseguire un programma altrimenti deve uscrire.

    Quakcuno mi da un esempio da utilizzare o sui cui lavorare. Grazie.

    Io ti darei una mano con degli esempi come fatto fino ad adesso... ma sicuramente il Thread verrà bloccato in quanto vengono affermate cose del tutto False e denigratorie nei miei confronti. (Ho provveduto a segnalare al moderatore il post a riguardo)

    Se vuoi continuare ad avere un supporto puoi contattarmi in privato senza nessun problema. 
    A completa disposizione per risolvere il tuo quesitoe portarloatermine.

    Tanto qui non c'è modo di avere discussioni civili ed educate come si dovrebbe in una comunità.

  • Re: Programmazione in Batch

    15/06/2025 - oregon ha scritto:

    Se il batch non ti convince perchè non lo hai compreso sappi che non è lo strumento giusto, è un consiglio che ti darei se volessi andare in monopattino da Roma ad Oslo, si può fare (tutto si può fare anche le cose stupide) ma non per questo ti consiglierei di usarlo.

    Mah..... che dire.... E pensare che nel S.O. Windows vengono proprio usati anche gli script .Bat, Vbs e .ps1  (è proprio Windows per primo ad utilizzarli)

    Ma prima di dire certe inesattezze e consigliare in malo modo gli OP, sarebbe necessario almeno conoscere le basi della materia di cui si pensa o si vuol far pensare di sapere tutto.  

    Incredibile!

    per Oregon62 non dare retta a tali affermazioni forvianti e del tutto inesatte.

  • Re: Programmazione in Batch

    15/06/2025 - By65Franco ha scritto:

    Mah..... che dire.... E pensare che nel S.O. Windows vengono proprio usati anche gli script .Bat, Vbs e .ps1  (è proprio Windows per primo ad utilizzarli)

    Ma prima di dire certe inesattezze e consigliare in malo modo gli OP, sarebbe necessario almeno conoscere le basi della materia di cui si pensa o si vuol far pensare di sapere tutto.  

    Incredibile!

    Come al solito hai perso un'altra occasione per tacere ed evitare flame.

    Prima di tutto io mi rivolgevo all'op e non a te, quindi evita di rivolgerti a me.

    In secondo luogo mi riferivo all'uso dei batch per gestione di file di testo per estrapolare dati che l'op vuole fare, non all'utilità degli script in generale per Windows.

    Per finire non ho usato nessun 'malo modo' e non ho scritto inesattezze. Tu non hai nessuna conoscenza relativa alla mia preparazione o percorso professionale, quindi astieniti dal giudicare le mie osservazioni e bada solamente a scrivere le tue.

    Ti segnalo nuovamente per aver creato un ulteriore flame. Prima o poi qualcuno prenderà provvedimenti oltre a chiudere i thread.

Devi accedere o registrarti per scrivere nel forum
18 risposte