2016-06-16 12 views
-1

Ich habe versucht, viel Code für ähnliche Fragen zu optimieren, aber ich glaube nicht, dass die Lösung veröffentlicht wird. Mein Problem ist, dass der Teil, von dem ich den Rest entfernen möchte, 2 mal vor dem letzten existiert!Entfernen von Teil des Dateinamens mit Stapel

Was ich habe, ist ein Ordner mit:

number1-number2-number3 - some random text about the file.filetype 

Nummer1 von 01 bis 99
number2 reichen wird reichen im 1-99999
number3 1-999 reichen wird mit der Möglichkeit von 2 Dezimalstellen, getrennt von der ganzen Zahl durch.

Beispiel Ordner c:\temp\:

15-1592-1 - file 1.doc 
15-1592-2 - this is file2.pdf 
15-1592-3 - this cointains subfiles.html 
15-1592-3.1 - sub1.jpg 
15-1592-3.2 - sub2.pdf 

Was ich brauche, ist ein Ordner, in dem alles, was nach dem Ende der number3 aus dem Dateinamen entfernt wird, sondern auch der Dateityp unverändert.

Beispiel:

15-1592-1.doc 
15-1592-2.pdf 
15-1592-3.html 
15-1592-3.1.jpg 

Ich verstehe dies möglich ist ruhig, alle kombiniert Antworten zu lesen.

Was mir fehlt ist das Wissen, alles zu kompilieren!

+0

Was Sie bisher versucht haben? Bitte teilen Sie Ihren Code von [Bearbeiten] (http://Stackoverflow.com/posts/37863134/edit) die Frage post! – aschipfl

Antwort

1

Sie alles löschen wollen nach der erste Raum (ohne die Erweiterung)
das ist ganz einfach, wenn Sie Modifikatoren verwenden (siehe for /?):

@echo off 
setlocal enabledelayedexpansion 
for %%a in (??-*-*) do (
    for /f "tokens=1 delims= " %%b in ("%%~na") do (
    ECHO ren "%%a" "%%b%%~xa" 
) 
) 
+0

Ich habe deine Antwort nicht gesehen. geschickter Gebrauch von Wildcards, ich vergesse sie total. – elzooilogico

+0

Ja. Sehr hilfreich in der Tat! Vielen Dank! – TrueTom

0

seine ein wenig kompliziert die Dezimalstellen (falls vorhanden) zu extrahieren, aber die Arbeit machen sollte (möglicherweise einige Token Anpassung benötigen, um Ihre Bedürfnisse anzupassen)

@echo off 

setlocal enabledelayedexpansion 

set "source_path=c:\temp\*" 

for /f "tokens=1,* delims=." %%a in ('dir /b %source_path%') do (
    set "ext=" & set "decimal=" 
    for /f "tokens=1,* delims=." %%i in ("%%b") do (
    if "%%j" neq "" (
     set "ext=%%j" 
     for /f "tokens=1,* delims=- " %%d in ("%%i") do set "decimal=.%%d" 
    ) else (
     set "ext=%%i" 
    ) 
) 
    for /f "tokens=1-3,* delims=- " %%i in ("%%a") do (
    rem replace echo with operation you need 
    echo %%i-%%j-%%k!decimal!.!ext! 
) 
) 

endlocal 
Verwandte Themen