tsukisan
Goto Top

Bestimmte Zeichen einer Datei umbenennen mit Batch

Ich möchte Dateien in einem Ordner umbenennen und zwar nur bestimmte Zeichen davon.

Hallo Jungs,

nur interessehalber möchte ich gern bestimmte Zeichen(Strings) einer Datei umbenennen.

Zum Beispiel:
Ich habe in einem Ordner C:\Test\
einige Dateien. Die heißen:
1_2_3_4.txt
5_6_7_8.txt
9_10_11_12.txt
13_14_15_16.txt
usw.

Nun stört mich der Unterstrich "_" und ich möchte diesen durch ein Leerzeichen " " in einem Rutsch mittels Batch ersetzen.

Wie man die Dateien in einem Ordner auflistet ist mir klar. Da hätte ich:
@Echo OFF
for /F "tokens=*" %%f in ('dir /b *.*') do (  
	echo %%f 
)

Wie bekomme ich aber die Variable "%%f" dazu, dass ich diese in eine neue Variable einlese und dabei den Unterstrich durch ein
Leerzeichen ersetze.

Das hier
Set Neu=%f:_= "  
funktioniert scheinbar nicht.
Dann müßte ich ja nur noch schreiben:
ren %%f %neu%

Aber da "beist" sich ja was.

In VBS läßt sich das einfach lösen. Da habe ich auch eine Lösung dafür. Kein Problem! Nur wie macht man das mit Batch??

Hier eine Lösung in VBS:
Dim FSO, Ordner, Von , Nach

Ordner = InputBox("Bitte Pad eingeben!")  
Von = InPutBox("Bitte Suchzeichen eigeben!", , "_")  
Nach = InputBox("Bitte Ersetzungszeichen eingeben!", ," ")  

Set FSO = CreateObject("Scripting.FileSystemObject")  
For Each File In FSO.GetFolder(Ordner).Files
	a = Replace(File.Name, von , nach)
	Wscript.Echo "Benenne: " & File.Name & "um nach : " & a  
	FSO.MoveFile File.Name , a
Next

Vielen Dank für eure Mühe und

viele Grüße

Tsuki

Content-ID: 154119

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

Ausgedruckt am: 24.11.2024 um 00:11 Uhr

colinardo
colinardo 01.11.2010 um 13:37:03 Uhr
Goto Top
du hast hier anstatt "%" ein Anführungszeichen gesetzt, das ist der Fehler:
Set Neu=%f:_= "  

das geht 100%:

Set Neu=%f:_= %
60730
60730 01.11.2010 um 13:58:13 Uhr
Goto Top
Moin Tsuki.

naja eigentlich hasse ich ja leerzeichen in fast allem....

for /f "tokens=1-5 delims=_" %%a in ('dir /b *_*') do echo %%a  

kennst du doch sicher...

for /f "tokens=1-5 delims=_." %a in ('dir /b *_*.*.txt') do echo %b %c %d  
kennst du auch face-wink
for /f "tokens=1-5 delims=_." %%a in ('dir /b *_*.*.txt') do (  
    if not "%e"=="" if not "%%e"=="txt" ren "%%a_%%b_%%c_%%d_%%e.txt" "%%a %%b %%c %%d %%e.txt"  
rem usw
)

Gruß
bastla
bastla 01.11.2010 um 14:48:46 Uhr
Goto Top
@softmeister
das geht 100%:
... wenn Du eine Variable %f% erfindest face-wink - mit der Schleifenvariablen %%f allerdings nicht ...

... da würde dann eine "gewöhnliche" Variable zusätzlich benötigt - also etwa:
@echo off & setlocal
for /f "delims=" %%f in ('dir /b /a-d *.txt') do set "DateinameAlt=%%f" & call :ProcessFile "%%f"  
goto :eof

:ProcessFile
ren %1 "%DateinameAlt:_= %"  
goto :eof
oder, wenn es keine Dateinamen mit "!" im Namen gibt, auch:
@echo off & setlocal enabledelayedexpansion
for /f "delims=" %%f in ('dir /b /a-d *.txt') do set "DateinameAlt=%%f" & ren "%%f" "!DateinameAlt:_= !"  
Grüße
bastla

P.S.: Beide Vorschläge ungetestet ...
TsukiSan
TsukiSan 01.11.2010 um 23:04:04 Uhr
Goto Top
Moin zusammen,

vielen Dank für eure schnellen und richtigen Antworten!

@softmeister
ich hatte es auch ohne unnötiges Anführungszeichen vorher probiert und bei meiner Fragestellung ehr eins vergessen.
Hatte beides aber nicht funktioniert.

@bastla
hab mich für den 2ten Vorschlag entschieden, da keine Sonderzeichen in den Dateien vorkommen.
Besten Dank!!!

@Timo
ja, normalerweise mag ich die Leerzeichen auch nicht. Aber in diesem Falle gingen mir die Unterstriche bei der "Neu-Benamsung" auf den Keks und ich hätte lieber Leerzeichen. Dabei hatte ich mir gedacht, nimmst'e Batch, geht schneller als VBS und siehe da, musste eine Frage posten, weil's mich ja nun doch interessiert hatte, wie's in Batch geht.

Also nochmals, Danke euch allen und noch eine schöne Woche

Tsuki