Hier ist eine mögliche Lösung mit extra Code, die höchstwahrscheinlich nicht wirklich benötigt wird, um den Namen einer umzubenennenden Datei zu validieren.
Die Anforderung der Verwendung verzögerter Umgebungsvariablenerweiterung innerhalb eines mit (
... )
definierten Befehlsblocks wird durch diesen Code vermieden, indem ein Unterprogramm verwendet wird.
@echo off
setlocal EnableExtensions
for %%I in (*_*.txt) do call :FileRename "%%~nxI"
endlocal
goto :EOF
rem This subroutine interprets name of a file being valid for rename
rem under following conditions:
rem 1. File name does not start with an underscore.
rem 2. File name does not end with an underscore.
rem 3. There are at least 4 characters after first underscore in name.
rem 4. A file with the new file name does not already exist.
rem The last condition is necessary to avoid
rem 1. renaming a file with longer name to an already existing file
rem because that would result in an error message on rename and
rem 2. renaming a file which was already renamed before and because
rem of that the new file name is equal the current file name.
:FileRename
set "FileName=%~n1"
if "%FileName:~0,1%" == "_" goto :EOF
if "%FileName:~-1%" == "_" goto :EOF
for /F "tokens=1* delims=_" %%A in ("%FileName%") do (
set "NamePartFirst=%%A"
set "NamePartRest=%%B"
)
if "%NamePartRest:~3,1%" == "" goto :EOF
set "NewFileName=%NamePartFirst%_%NamePartRest:~-4%%~x1"
if not exist "%NewFileName%" ren "%~nx1" "%NewFileName%"
goto :EOF
Zum Testen, bevor die Datei wirklich macht umbenennt entweder Befehl ren
durch Befehl ersetzen echo
oder einfügen Befehl echo
zu ren
links in vorletzter Linie.
Um die verwendeten Befehle und ihre Funktionsweise zu verstehen, öffnen Sie ein Eingabeaufforderungsfenster, führen Sie die folgenden Befehle aus und lesen Sie alle Hilfeseiten, die für jeden Befehl angezeigt werden, sorgfältig durch.
call /?
echo /?
endlocal /?
for /?
goto /?
if /?
rem /?
ren /?
set /?
setlocal /?
das ist schön. Viel Glück damit. Hattest du eine Programmierfrage? Diese Seite ist für Fragen (Sie zeigen Code, erklären, wie es funktioniert, und wir versuchen vielleicht, es zu beheben). Es ist kein Ort, um eine To-Do-Liste auszugeben. –
Veröffentlichen Sie den Code, den Sie versucht haben, der nicht funktioniert. – ManoDestra