Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Dateistring umbenennen

Frage Entwicklung Batch & Shell

Mitglied: chainsaw

chainsaw (Level 1) - Jetzt verbinden

13.03.2009, aktualisiert 16.03.2009, 3175 Aufrufe, 5 Kommentare

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
Mitglied: bastla
13.03.2009 um 15:23 Uhr
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
Bitte warten ..
Mitglied: chainsaw
16.03.2009 um 09:59 Uhr
Hallo bastla,

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

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
Bitte warten ..
Mitglied: Biber
16.03.2009 um 11:28 Uhr
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, ....
01.
@echo off  & setlocal enabledelayedexpansion 
02.
 
03.
for /F "Delims=" %%i in (rename.ini) do call :los "%%i"  
04.
::----- hier ist der Batch logisch zu Ende. 
05.
:: ----da aber noch Codezeilen folgen, muss hier ein "goto :eof" stehen 
06.
GoTo :eof 
07.
::----- hier ist der Batch auch für die Cmd.exe zu Ende. 
08.
 
09.
 :Los 
10.
echo Im Verzeichnis %1 wird umbenannt: 
11.
.... 
12.
::..... usw... 
13.
goto :eof
Grüße
Biber
Bitte warten ..
Mitglied: bastla
16.03.2009 um 11:45 Uhr
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
Bitte warten ..
Mitglied: chainsaw
16.03.2009 um 11:53 Uhr
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)

Das habe ich mittlerweile ergurgelt:

set /p varname=<rename.ini

funktioniert auch.

Danke dir, Beitrag gelöst

Gruß und schöne Woche
chainsaw
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Mehrere Grafiken mit Batch umbenennen (3)

Frage von SeraphinaJ zum Thema Batch & Shell ...

Batch & Shell
gelöst Linux Shell Mailanhang umbenennen (2)

Frage von Thekivi zum Thema Batch & Shell ...

Batch & Shell
gelöst Ordner Umbenennen +heutiges Datum (12)

Frage von ahsenden zum Thema Batch & Shell ...

Windows 7
Dateien umbenennen Unterschiede in Win7 und XP (3)

Frage von mani55 zum Thema Windows 7 ...

Heiß diskutierte Inhalte
TK-Netze & Geräte
gelöst Telefonanlage gesucht (37)

Frage von Xaero1982 zum Thema TK-Netze & Geräte ...

Windows Netzwerk
Anmeldung an Domäne schlägt oft fehlt (Fehlermeldung: falsches Passwort) (24)

Frage von harald.schmidt zum Thema Windows Netzwerk ...

Exchange Server
gelöst Wie freigegebenes Postfach immer als primäre Sendeadresse verwenden? (18)

Frage von Flinxit zum Thema Exchange Server ...

Microsoft Office
Outlook 2016 - Keine Mails sichtbar (nach Suche schon) (17)

Frage von Hirschix3 zum Thema Microsoft Office ...