Vraag Batch: verwijder bestandsextensie


Ik heb het volgende batch-script van Wikipedia:

@echo off
    for /R "C:\Users\Admin\Ordner" %%f in (*.flv) do (
    echo %%f
)
pause

In de for-loop worden alle bestanden met de extensie flv weergege- ven, maar ik wil dat het een aantal acties uitvoert met het bestand (en) waar ik een keer het bestand nodig zonder de extensie en een keer met de extensie. Hoe kon ik deze twee krijgen?

Ik zocht naar oplossingen, maar ik vind er geen. Ik ben een echte newbie in batch ...


118
2017-07-09 18:29


oorsprong


antwoorden:


Je kunt gebruiken %%~nf om de bestandsnaam alleen te krijgen zoals beschreven in de referentie voor for:

@echo off
    for /R "C:\Users\Admin\Ordner" %%f in (*.flv) do (
    echo %%~nf
)
pause

De volgende opties zijn beschikbaar:

Variabele met modifier Beschrijving

% ~ I ​​breidt% I uit, waardoor omringend wordt verwijderd
                        aanhalingstekens ("").
% ~ fI breidt% I uit naar een volledig gekwalificeerde padnaam.
% ~ dI breidt% I alleen uit naar een stationsletter.
% ~ pI breidt% I alleen uit naar een pad.
% ~ nI breidt% I alleen uit met een bestandsnaam.
% ~ xI breidt% I alleen uit met een bestandsextensie.
% ~ sI Breidt het pad uit om alleen korte namen te bevatten.
% ~ aI breidt% I uit met de bestandskenmerken van het bestand.
% ~ tI breidt% I uit met de datum en tijd van het bestand.
% ~ zI breidt% I uit naar de bestandsgrootte.
% ~ $ PATH: I Zoekt naar de mappen in de PATH-omgeving
                        variabele en breidt% I uit naar de volledig gekwalificeerde naam van
                        de eerste gevonden. Als de naam van de omgevingsvariabele is
                        niet gedefinieerd of het bestand wordt niet gevonden door de zoekopdracht,
                        deze modifier expandeert naar de lege string.

236
2017-07-09 18:35



In het geval dat het bestand dat uw variabele bevat niet bestaat, is het bestand FOR aanpak zal niet werken. Eén truc die je zou kunnen gebruiken, als je de lengte van de extensie kent, is een substring:

%var:~0,-4%

de -4 betekent dat de laatste 4 cijfers (vermoedelijk .ext) wordt afgekapt.


24
2017-10-01 17:51



Ik ben ook een vreemde voor windows cmd, maar probeer dit:

echo %%~nf

13
2017-07-09 18:34



Dit is een erg laat antwoord, maar ik bedacht dit om een ​​specifiek probleem op te lossen met DiskInternals LinuxReader met toevoeging van '.efs_ntfs' aan bestanden die werden opgeslagen in niet-NTFS (FAT32) mappen:

@echo off
REM %1 is the directory to recurse through and %2 is the file extension to remove
for /R "%1" %%f in (*.%2) do (
    REM Path (sans drive) is given by %%~pf ; drive is given by %%~df
    REM file name (sans ext) is given by %%~nf ; to 'rename' files, move them
    copy "%%~df%%~pf%%~nf.%2" "%%~df%%~pf%%~nf"
    echo "%%~df%%~pf%%~nf.%2" copied to "%%~df%%~pf%%~nf"
echo.
)
pause

8
2018-03-29 21:29