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

Dateiname - bestimmtes Zeichen an unbestimmter Stelle suchen und ersetzen via Batch

Frage Entwicklung Batch & Shell

Mitglied: jonny83

jonny83 (Level 1) - Jetzt verbinden

30.11.2009 um 09:23 Uhr, 17017 Aufrufe, 8 Kommentare

Dateinamen sollen nach einem Zeichen durchsucht werden und das dann durch ein bestimmtes ersetzt werden - Variabel sind jeweils die Stellen in dem Dateinamen.

Hallo,

auch nach längerem Suchen, hier im Forum und google, bekomme ich das nicht hin

Folgendes muss ich machen:

Derartige Dateien

ABC%20DEF%20GHIJKLMN%20.pdf
Das%20ist%20ein%20Test%20.txt
Gib%20mir%20bitte%20Leerstellen.doc

ändern in

ABC_DEF_GHIJKLMN_.pdf
Das_ist_ein_Test_.txt
Gib_mir_bitte_Leerstellen.doc

Die Dateinamen beinhalten also unterschiedlich viele Zeichen vor und nach %20

Was ich jetzt suche ist eine Batch die mir %20 in _ ändert.

Hier im Forum finde ich derartiges nur mit einer gleichen Anzahl von Zeichen vor und nach einer Variablen.

Der String ren *%20*.txt *_*.txt führt mich leider immer zu dem Ergebnis:

ABC%20DEF%20GHIJKLMN%20.pdf_.pdf
Das%20ist%20ein%20Test%20.txt_.txt
Gib%20mir%20bitte%20Leerstellen.doc_.doc

PS: Die Verwendung eines Tools ist ausgeschlossen - renameit oä. fällt somit leider weg. Es muss durch ein Skript gelöst werden.

Danke im Voraus für eure Hilfe!
Mitglied: Biber
30.11.2009 um 09:56 Uhr
Moin jonny83,

ich würde mich da nicht mit rumskripten aufhalten für so einen pilpul.
Fackel die Klamotte bei Bedarf mit einer Halbzeile vom CMD-Prompt ab.
01.
(= 9:52:20  D:\temp=) 
02.
>for %i in ("e:\schnipsel\*%20*.*") do @set "neu=%~nxi" & echo ren "%i" "!neu:%20=_!" 
03.
ren "e:\schnipsel\ABC%20DEF%20GHIJKLMN%20.pdf" "ABC_DEF_GHIJKLMN_.pdf" 
04.
ren "e:\schnipsel\Das%20ist%20ein%20Test%20.txt" "Das_ist_ein_Test_.txt" 
05.
ren "e:\schnipsel\Gib%20mir%20bitte%20Leerstellen.doc" "Gib_mir_bitte_Leerstellen.doc"
[ das ">" nicht mit eingeben; ist Teil meines Prompts]
[das "Echo ren" ist in beiden Schnipseln natürlich nur zum Testen... wenn tatsächlich umbenannt werden soll, das Wort "echo" weglassen]
Falls bei dir "Delayedexpansion" nicht standardmäßig gesetzt ist, kommen noch zwei Worte mehr dazu
01.
(= 9:52:21  D:\temp=) 
02.
>setlocal enableDelayedExpansion & for %i in ("e:\schnipsel\*%20*.*") do @set "neu=%~nxi" & echo ren "%i" "!neu:%20=_!" 
03.
ren "e:\schnipsel\ABC%20DEF%20GHIJKLMN%20.pdf" "ABC_DEF_GHIJKLMN_.pdf" 
04.
ren "e:\schnipsel\Das%20ist%20ein%20Test%20.txt" "Das_ist_ein_Test_.txt" 
05.
ren "e:\schnipsel\Gib%20mir%20bitte%20Leerstellen.doc" "Gib_mir_bitte_Leerstellen.doc"
... aber selbst dann geht es schneller, diese eine Zeile einzutippseln als zu überlegen, wie denn wohl der Batch hiess, unter dem diese Umbenamserei abgespeichert ist.

Grüße
Biber
Bitte warten ..
Mitglied: jonny83
30.11.2009 um 10:07 Uhr
Hallo Biber,

danke für die schnelle Antwort.

Zwei Dinge habe ich noch:

Es geht hier um den gesamten Inhalt eines Ordners c:\schnipsel\*.* <-- Egal was hier drin ist soll nach %20 durchsucht werden und bei "found" mit _ ersetzt werden.

Das zweite ist eine Frage:

kannst du mir nochmal das Skript erstellen (wie oben) mit der Voraussetzung das eben alle Dateien in dem Ordner bearbeitet werden?

.... danke!!!!
Bitte warten ..
Mitglied: jonny83
30.11.2009 um 10:33 Uhr
es geht hier auch darum meinen Benutzern ein Vorgehen zu beschreiben:

1. !Kopieren! Sie die betreffenden Dateien im Ordner C:\rename ab
2. Starten Sie das Programm "Start" "Programme" "Rename" Rename
3. Prüfen Sie ob die Dateien wie gewünscht umbenannt wurden

So - unter der Ink Rename muss klar meine Batch folgen
Bitte warten ..
Mitglied: paulepank
30.11.2009 um 12:04 Uhr
Hallo,

@Biber

setlocal enableDelayedExpansion
wirkt nur in einer Batch

in einem Einzeiler geht es dann so:
01.
cmd /v:on /c "for %i in ("e:\schnipsel\*%20*.*") do @set "neu=%~nxi" & echo ren "%i" "!neu:%20=_!""
@jonny83

was dir Biber geschrieben hat, erfüllt den Tatbestand des Durchsuchens nach %20.
Wenn du unbedingt für deine User eine Batch schreiben willst, dann tu Du es, indem du Bibers Einzeiler in eine Batch schreibst und die %-Zeichen verdoppelst.

cu paulepank
Bitte warten ..
Mitglied: jonny83
30.11.2009 um 13:44 Uhr
@Bider

vielen Dank für die Antwort - an der Stelle sei das nochmal gesagt!

@ paulepank

auch hier ein Danke für die Antwort - ich wollte ja nicht das Biber mir die Arbeit komplett abnimmt - nur wusste ich schon vorher das folgende Fragen auftauchen würde:

Folgendes habe ich in einer rename.cmd stehen:

C:\>setlocal enableDelayedExpansion & for %i in ("c:\rename\*%20*.*") do @set "n
eu=%~nxi" & ren "%i" "!neu:%20=_!"

Folgende Ausgabe erhalte ich:

Dateiname existiert bereits, oder die Datei
konnte nicht gefunden werden.
Dateiname existiert bereits, oder die Datei
konnte nicht gefunden werden.
Dateiname existiert bereits, oder die Datei
konnte nicht gefunden werden.
Dateiname existiert bereits, oder die Datei
konnte nicht gefunden werden.
Dateiname existiert bereits, oder die Datei
konnte nicht gefunden werden.
Dateiname existiert bereits, oder die Datei
konnte nicht gefunden werden.
Dateiname existiert bereits, oder die Datei
konnte nicht gefunden werden.
Dateiname existiert bereits, oder die Datei
konnte nicht gefunden werden.
Dateiname existiert bereits, oder die Datei
konnte nicht gefunden werden.


tut mir leid - aber ich finde den Fehler nicht ....
Bitte warten ..
Mitglied: paulepank
30.11.2009 um 14:14 Uhr
Hallo,

wenn z.B. im Ordner "rename" eine Datei A%20B.pdf und ein Datei A_B.pdf enthalten ist, kommt beim Umbenennen diese Fehlerauschrift.
Du mußt also diesen Umstand entsprechend beachten.

cu paulepank
Bitte warten ..
Mitglied: Biber
30.11.2009 um 14:34 Uhr
Moin jonny83,

sorry, war anderweitig beschäftigt.

Wenn es denn nun in Gates Namen eine Batchdatei sein muss, dann anbei dafür eine (mögliche) Syntax unter der Auflage:
Versuch bitte nicht, die Logik der einfachen und doppelten Prozentzeichen irgendwem abends beim Darts in der Kneipe zu vermitteln.
01.
::--- Renamer.cmd 
02.
@echo off & setlocal enableDelayedExpansion  
03.
for %%i in ("c:\rename\*%%20*.*") do ( 
04.
     set "neu=%%~nxi"  
05.
     Echo ren "%%i" "!neu:%%20=_!" 
06.
) 
Die Batch sieht - in diesem exotischen Fall - nicht unbedingt leserlicher aus als der CMD-Oneliner, weil...
  • zwar die eine (logische) Befehlszeile auf 4 optische Zeilen verteilt werden kann
  • und ich auch noch in einfachen Worten plausibel rüberbringen kann, dass im Batch aus %i ein %%i, aus %j ein %%j wird etc.
  • aber damit der Suchstring "%20" nicht mit einem möglichen Parameter %2 verwechselt werden kann, dazu sind nochmals in vollkommen abstrusen Stellen %-Zeichen einzustreuen.
---> nimm die Syntax einfach so hin.

Grüße
Biber

P.S. @paulepank
Yep, der Hinweis auf "Cmd /v:on" ist berechtigt.
Und eigentlich funktioniert (oder funktioniert geplanterweise) SetLocal EnableDelayedExpansion auch nur im Batch.
Bitte warten ..
Mitglied: jonny83
30.11.2009 um 14:48 Uhr
Hallo Biber,

hey - ich danke dir 1000fach!
Super klasse - so funktioniert es jetzt prima!

Vielen vielen Dank!!!!

Gruß
jonny83
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Suchen, Ersetzen und Entfernen von Dateiinhalten auf Textbasis (1)

Frage von DanteManor zum Thema Batch & Shell ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...