chainsaw
Goto Top

Frage zu Variable beim Dateinamen umbenennen

Hallo Gemeinde,

Ich bin da über was gestolpert, das ich nicht lösen kann.

Mit dem Schnipsel hier lösche ich die ersten vier Stellen
von Dateien die in C:\temp liegen:

:start
FOR /R "C:\Temp" %%i in ("*.*") do call :Tuwas "%%i"  
goto :eof

:Tuwas
set "Alt=%~n1"  
set "T1=%Alt:~4,50%"  
ren %1 "%T1%%~x1"  

Jetzt habe ich probiert, vorher abzufragen, wieviel Stellen denn gelöscht werden sollen:

set /p var=Wieviel Stellen sollen geloescht werden?:

Gibt`s ne Möglichkeit, die Variable %var% in die Abfrage mit einzubauen? Folgendes funktioniert nicht
(vermutlich weil %var% dann ja innerhalb von zwei %-Zeichen steht ):

set "T1=%Alt:~%var%,50%"  

Gibts da eine andere Schreibweise (Hochkomma oder sowas) womit man das zum laufen bringt?

Schönen Tag noch
Gruß chainsaw

Content-ID: 135084

Url: https://administrator.de/forum/frage-zu-variable-beim-dateinamen-umbenennen-135084.html

Ausgedruckt am: 23.12.2024 um 04:12 Uhr

Biber
Biber 03.02.2010 um 16:14:38 Uhr
Goto Top
Moin chainsaw,

eine Möglichkeit der Umsetzung wäre der Weg über delayed expansion.
Dabei werden per SET definierte (=statische) Variablen in einer bestimmten (zeitlichen) Reihenfolge aufgelöst
[ statt -wie es Standard ist- alle "gleichzeitig" unmittelbar vor dem Ausführen der ganzen Befehlszeile.]

Dazu muss "Setlocal EnableDelayedExpansion" angesagt werden und dann die "verzögert" aufzulösenden Variablen als !variable! statt %variable% angesprochen werden.

Versuch es so:
@echo off & setLocal EnableDelayedExpansion
:start
Set /p "DieLaenge=Bitte Länge eingeben: "  
:: ich gebe hier mal 2 oder 4 ein...auf jeden Fall eine Zahl....
:: HIER FEHLT NOCH EINE PRÜFUNG AUF GÜLTIGE EINGABE

FOR /R "D:\Temp" %%i in ("*.txt") do call :Tuwas "%%i"  
goto :eof

:Tuwas
set "Alt=%~n1"  
set "T1=!Alt:~%dieLaenge%,50!"  
Echo ren %1 "%T1%%~x1"  

... ergibt z.B: bei Eingabe von "2" als DieLaenge
....
ren "D:\Temp\templogs\2005\2005logs.txt" "05logs.txt"
ren "D:\Temp\templogs\2006\2006logs.txt" "06logs.txt"
ren "D:\Temp\test\6343_test_1.txt" "43_test_1.txt"
ren "D:\Temp\test\6343_test_2.txt" "43_test_2.txt"
...

Grüße
Biber
chainsaw
chainsaw 03.02.2010 um 17:13:26 Uhr
Goto Top
Hallo Biber,

Perfekt! Vielen Dank, wieder was gelernt... face-smile

Schöne Grüße
Chainsaw