Windows-batch omdøbning

Indlæg af Hanne Mølgaard Plasc

Problem



I øjeblikket arbejder jeg på et lille værktøj, der behandler et bestemt arkivformat. Spørgsmålet er: formoder, at jeg har flere filer, som enten ikke matcher *.zipped.* mønster eller ej. Den sidste stjerne er garanteret at repræsentere formatet (udvidelse). Hvordan overfører jeg alle matchende filer til hjælpeprogrammet via Windows .bat-fil?


Et eksempel script skal være sådan:


FOR /R "\%CD\%" \%\%I IN (*.zipped.*) DO (
 SET file\_name=\%\%I
 offzip \%\%I !file\_name:~end,end-7!\%\%~xI
)


hvor 'offzip' repræsenterer det værktøj, jeg bruger.
Selvfølgelig hjælper denne ikke. Forresten kan udvidelser være af forskellig længde.


Eksempel tilfælde:



  • 'sample.zipped.txt' -> 'sample.txt'

  • 'zipped123.zipped.dat' -> 'zipped123.dat'

  • 'abc.zipped.samplextension' -> 'abc.samplextension'



Tak for din hjælp!

Bedste reference


Du kan bruge en indlejret For løkke til at behandle .zipped som en anden ekstern fjernelse via metavariabel ekspansion:


For /R \%\%A In (*.zipped.*) Do For \%\%B In ("\%\%~dpnA"
) Do offzip "\%\%A" "\%\%~dpnB\%\%~xA"

Andre referencer 1


Sæt scriptet nedenfor i en fil som zren.ps1, og brug derefter:


powershell -NoLogo -NoProfile -File zren.ps1


=== zren.ps1


Get-ChildItem -File -Recurse -Filter '*.zipped.*' |
    ForEach-Object {
        if ($\_.Name -match '.*.zipped.[^.]*$') {
            $newname = $\_.Name -replace '.zipped.','.'
            & offzip "$\_.FullName" "$newname"
        }
    }