chainsaw
Goto Top

Dateistring umbenennen

Hallo Gemeinde,

Ich möchte einen beliebigen String aus mehreren Dateien abfragen und diesen durch einen neuen ersetzten.
Das mache ich mit diesem Skript:

@echo off
set /p laufvar=Laufwerksbuchstabe angeben:
set /p verzvar=Ordner angeben:
if exist %laufvar%:\%verzvar% goto :los
if not exist %laufvar%:\%verzvar% goto :meldung
goto end

:los
cd %laufvar%:\%verzvar%
setlocal enabledelayedexpansion
set /p oldstr=Welcher String soll ersetzt werden?:
set /p newstr=Neuen String eingeben:
for %%i in (*%oldstr%*.*) do set x=%%i&ren "%%i" "!x:%oldstr%=%newstr%!"

Das funktioniert wunderbar - aber nur wenn ich Dateien auf der gleichen Festplattenpartition umbenennen möchte, auf der der Batch liegt.
Wähle ich ein anderes Laufwerk aus oder versuche Daten auf einem Netzlaufwerk umzubenennen, dann passiert gar nix.
Eine Fehlermeldung gibts auch nicht.
Kann das am setlocal Befehl liegen?
Vielleicht habt ihr eine Idee.

Schönes Wochenende
Gruß chainsaw

Content-ID: 111342

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

Ausgedruckt am: 22.11.2024 um 19:11 Uhr

bastla
bastla 13.03.2009 um 15:23:08 Uhr
Goto Top
Hallo chainsaw!

Falls Du bei der Methode mit "cd" bleiben willst, wäre zumindest noch ein zusätzliches "/d" anzuraten - also:
cd /d %laufvar%:\%verzvar%
Die "setlocal"-Zeile wäre übrigens gleich am Anfang des Batches besser platziert (damit keine Variablen-Leichen nach dem Ende des Batches übrig bleiben).

Grüße
bastla
chainsaw
chainsaw 16.03.2009 um 09:59:28 Uhr
Goto Top
Hallo bastla,

Du bist genial - jetzt funktioniert`s. Kleiner Parameter, große Wirkung! face-smile

Nur noch zwei kleine Zwischenfragen:
Du schreibst "falls du bei "cd" bleiben willst...
Was wäre die (bessere?) Alternative - chdir?

Elegant wäre jetzt, einen Pfad in einer .ini-Datei zu hinterlegen, und diesen dann im Batch zu verwenden.
Ih hab das versucht - leider auch nur mit Teilerfolg:

1) @echo off
2) setlocal enabledelayedexpansion
3)
4) for /F "Tokens=*" %%i in (rename.ini) do call :los "%%i"
5) :Los
6) echo Im Verzeichnis %1 wird umbenannt:
7) cd /d "%1"
8) set /p oldstr=Welcher String soll ersetzt werden?:
9) set /p newstr=Neuen String eingeben:
10) for %%i in (*%oldstr%*.*) do set x=%%i&ren "%%i" "!x:%oldstr%=%newstr%!"
11)
12) :End

Das haut hin, Zeile 6 zeigt an, dass er im Verzeichnis C:\temp umbenennt, wie in der ini hinterlegt. Aber nach dem Umbenennen beginnt der Batch von neuem, zeigt aber keine Variable mehr an.
Bei Zeile 6 heitß es dann: "Im verzeichnis wird umbenannt:"
Ich kann dann weiterhin umbenennen und erst dann beendet sich der Batch.
Verträgt sich hier das %%i in den beiden Schleifen nicht?

Schönen Tag und vielen Dank
Gruß chainsaw
Biber
Biber 16.03.2009 um 11:28:06 Uhr
Goto Top
Moin chainsaw,

Du schreibst "falls du bei "cd" bleiben willst...
Was wäre die (bessere?) Alternative - chdir?
Das wäre ein ähnlicher Kalauer wie "Helmut statt Helmut" im Bundeskanzlerwahlkampfduell Schmidt vs. Kohl.
Eine echte Alternative (also fürs CD /D) wäre das Gespann PushD / PopD zum zum rekonstuierbaren Lw/Verzeichniswechsel. Siehe PushD /? und PopD /?

Elegant wäre jetzt, einen Pfad in einer .ini-Datei zu hinterlegen, ....
@echo off  & setlocal enabledelayedexpansion

for /F "Delims=" %%i in (rename.ini) do call :los "%%i"   
::----- hier ist der Batch logisch zu Ende.
:: ----da aber noch Codezeilen folgen, muss hier ein "goto :eof" stehen 
GoTo :eof
::----- hier ist der Batch auch für die Cmd.exe zu Ende.

 :Los
echo Im Verzeichnis %1 wird umbenannt:
....
::..... usw...
goto :eof

Grüße
Biber
bastla
bastla 16.03.2009 um 11:45:48 Uhr
Goto Top
Hallo chainsaw!
Du schreibst "falls du bei "cd" bleiben willst...
Was wäre die (bessere?) Alternative - chdir?
Du könntest den Wechsel des Verzeichnisses durch die Verwendung eines vollständigen Pfades einsparen:
for %%i in ("%laufvar%:\%verzvar%\*%oldstr%*.*") do set "x=%%~nxi"&ren "%%i" "!x:%oldstr%=%newstr%!"
Grüße
bastla
chainsaw
chainsaw 16.03.2009 um 11:53:21 Uhr
Goto Top
Hallo Biber

Das wäre ein ähnlicher Kalauer wie "Helmut statt
Helmut" im Bundeskanzlerwahlkampfduell Schmidt vs. Kohl.

Ich bin ja noch lernfähig (das rede ich mir jedenfalls selbst immer wieder ein) face-smile

Das habe ich mittlerweile ergurgelt:

set /p varname=<rename.ini

funktioniert auch.

Danke dir, Beitrag gelöst

Gruß und schöne Woche
chainsaw