batchnewbie
Goto Top

2in1 Datei Verarbeitung

Hallo, ich komme nicht weiter.
Ich möchte meine Batch so verändern, dass sie doppelt funktional läuft. Einmal per for /f Schleife wo Dateien eines Typs verarbeitet werden (zb. Umbenannt werden, funktioniert tadellos) und einmal nur für einzelner explizit ausgewählte Datei.
Die zu verarbeitende Datei wird dann per Drag & Drop auf die Batchdatei gezogen und so nur diese geändert.

Zweiter Punkt, kann man Die Bedingung auch per if not machen, so, dass man sich die goto erspart?
Meine versuchen sind irgendwie alle im Sande verlaufen face-surprise

Dritter Punkt, kann man die for /f Schleife so verändern, dass die Verarbeitung außerhalb stattfindet, so, dass man den Code auch für die einzelne Datei Verarbeitung benutzten könnte (war jedenfalls meine erste Idee, wenn man etwas mehr zu verändern hat)?

Beispieldatei:
ABC_1234D.txt
ABC_12345X.txt

@echo off & setlocal enabledelayedexpansion
cls

set "Verzeichnis=%~dp0"  
set "Typ=txt"  

pushd "%Verzeichnis%"  

if [%1]== ( goto loop ) else (
    set "DateiName=%~n1"  
    set NeueDateiName=!DateiName:~4,-1!
    ren "%~n1" "!NeueDateiName!"  
    echo DateiName: !DateiName! ^> !NeueDateiName!
)
pause
goto :eof
:loop
for /F "delims=" %%i in ('dir /b /a-d "*.%Typ%"') do (  
    set "DateiName=%%~ni"  
    set NeueDateiName=!DateiName:~4,-1!

    echo DateiName: !DateiName! ^> !NeueDateiName!
    ren "%%i" "!NeueDateiName!%%~xi"  
    echo.
)
popd
pause
Danke für die Hilfe face-smile

Content-ID: 258897

Url: https://administrator.de/contentid/258897

Ausgedruckt am: 17.11.2024 um 15:11 Uhr

114757
Lösung 114757 04.01.2015 aktualisiert um 20:24:14 Uhr
Goto Top
Moin,
z.B. so
@echo off & setlocal
cls
set typ=txt
if [%1]== (
   for %%i in ("%~dp0*.%Typ%") do (  
      call :process "%%i"  
   )
) else (
  call :process "%~1"  
)
pause
goto :eof

:process
set "DateiName=%~n1"  
set "NeueDateiName=%DateiName:~4,-1%%~x1"  
echo DateiName: %DateiName% ^> %NeueDateiName%
ren "%~1" "%NeueDateiName%"  
goto :eof
Gruß jodel32
batchnewbie
batchnewbie 04.01.2015 aktualisiert um 20:34:18 Uhr
Goto Top
Hallo,
exzellent, vielen Dank face-smile

Nachtrag: Verständnis-frage zu Zeile 16 das %~x1 steht für die Dateisuffix nehme ich an?
114757
Lösung 114757 04.01.2015 aktualisiert um 21:25:17 Uhr
Goto Top
Zitat von @batchnewbie:
Nachtrag: Verständnis-frage zu Zeile 16 das %~x1 steht für die Dateisuffix nehme ich an?
Ja.

Noch als Ergänzung, wenn du möchtest kannst du auch hiermit mehrere Dateien gleichzeitig auf die Batch ziehen

echo off & setlocal
cls
set typ=txt
if [%1]== (
   for %%i in ("%~dp0*.%Typ%") do (  
      call :process "%%i"  
   )
) else (
  :next
  call :process "%~1"  
  shift
  if "%~1" NEQ "" goto next  
)
pause
goto :eof

:process
set "DateiName=%~n1"  
set "NeueDateiName=%DateiName:~4,-1%%~x1"  
echo DateiName: %DateiName% ^> %NeueDateiName%
ren "%~1" "%NeueDateiName%"  
goto :eof
batchnewbie
batchnewbie 04.01.2015 um 21:26:50 Uhr
Goto Top
Hallo,
Dankeschön, das ist schon fast eine Luxusversion face-smile