2016-06-29 1 views
0

Ich versuche, alle Zeichen aus einem Dateinamen zwischen dem ersten Unterstrich und den letzten 4 Zeichen des Dateinamens zu entfernen und die Dateierweiterung beizubehalten.Wie können Dateien umbenannt werden, indem alle Zeichen aus dem Dateinamen zwischen dem ersten Unterstrich und den letzten 4 Zeichen entfernt werden?

So zum Beispiel crashmaster_01011990_12311990.txt würde crashmaster_1990.txt

Ich kann nicht nur hart Code für die ersten 12 Zeichen, weil es andere Dateien wie crashcarrier_01011990_12311990.txt, die sie abwerfen wird.

Der folgende Code funktioniert nicht, aber selbst wenn es so wäre, möchte ich die letzten 18 Zeichen nicht abschneiden. Speichern Sie lieber die letzten 4 und hängen Sie nach dem ersten Unterstrich an.

+2

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. –

+0

Veröffentlichen Sie den Code, den Sie versucht haben, der nicht funktioniert. – ManoDestra

Antwort

1

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 /?