Cancellare i file: CMD vs. PowerShell

La buona abitudine di usare gli script sta tornando anche nell’ambiente Windows.

Dopo alcuni aborti come VBscript e alcune soluzioni di terze parti come KiXtart, sembra che PowerShell sia diventato il linguaggio di scripting sulla cui disponibilità nei client si può fare affidamento per l’immediato futuro.

PowerShell è una CLI molto potente e non ha nulla a che fare con CMD.EXE. L’ostacolo maggiore è che ha una serie di comandi e una sintassi completamente diverse da CMD.EXE, perciò l’amministratore di un sistema Windows deve impararsi di fatto un linguaggio nuovo.

Tra le differenze c’è l’interpretazione delle wildcard nella cancellazione dei file.

Sembra una cosa di poco conto, ma tutti sanno bene che la wildcard sbagliata può fare seri danni nelle opzioni di un comando di cancellazione di file.

Data una directory con tre file (file1.doc, file1.docx e file1.docxyz) e lo stesso comando del *.doc ecco i due diversi comportamenti di CMD.EXE e PowerShell.

cmd

powershell

Come si può vedere. CMD utilizza ancora un parser di estensioni di tipo 8.3, cosa che potrebbe essere abbastanza pericolosa in alcune situazioni.

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

2 pensieri riguardo “Cancellare i file: CMD vs. PowerShell”

  1. Io non sono sicuro che sia un “bug” quanto una feature voluta, purtroppo.

    Il comando DIR /X mostra il nome file “8.3” generato:
    /X This displays the short names generated for non-8dot3 file
    names. The format is that of /N with the short name inserted
    before the long name. If no short name is present, blanks are
    displayed in its place.

    R:\test>dir /x
    Volume in drive R is RAMDISK
    Volume Serial Number is 0520-0000

    Directory of R:\test

    02/11/2014 16:57 .
    02/11/2014 16:57 ..
    02/11/2014 16:56 0 PROVA1~1.ABC prova1.abcd
    02/11/2014 16:57 0 prova1.abc
    2 File(s) 0 bytes
    2 Dir(s) 966.864.896 bytes free

    In quest’ottica, il comando DEL *.ABC nel mio caso, ha ragione a cancelare anche “PROVA1~1.ABC”

    Il problema di mantenere compatibilità con il vecchio, anzi vecchissimo, non ha una soluzione pulita…

Spazio per un commento