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:
Jetzt habe ich probiert, vorher abzufragen, wieviel Stellen denn gelöscht werden sollen:
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 ):
Gibts da eine andere Schreibweise (Hochkomma oder sowas) womit man das zum laufen bringt?
Schönen Tag noch
Gruß chainsaw
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 135084
Url: https://administrator.de/contentid/135084
Ausgedruckt am: 22.11.2024 um 18:11 Uhr
2 Kommentare
Neuester Kommentar
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:
... ergibt z.B: bei Eingabe von "2" als DieLaenge
Grüße
Biber
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