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-Key: 258897

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

Printed on: April 19, 2024 at 23:04 o'clock

Mitglied: 114757
Solution 114757 Jan 04, 2015 updated at 19:24:14 (UTC)
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
Member: batchnewbie
batchnewbie Jan 04, 2015 updated at 19:34:18 (UTC)
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?
Mitglied: 114757
Solution 114757 Jan 04, 2015 updated at 20:25:17 (UTC)
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
Member: batchnewbie
batchnewbie Jan 04, 2015 at 20:26:50 (UTC)
Goto Top
Hallo,
Dankeschön, das ist schon fast eine Luxusversion face-smile