Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 19711 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 ..
Ähnliche Inhalte
Neue Wissensbeiträge
Ubuntu

Ubuntu 17.10 steht zum Download bereit

(3)

Information von Frank zum Thema Ubuntu ...

Datenschutz

Autofahrer-Pranger - Bewertungsportal illegal

(8)

Information von BassFishFox zum Thema Datenschutz ...

Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

(8)

Information von thomasreischer zum Thema Windows 10 ...

Microsoft

Die neuen RSAT-Tools für Win10 1709 sind da

(2)

Information von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
Router & Routing
Allnet - VDSL2 Modem - SFP (mini-GBIC) (20)

Frage von Dobby zum Thema Router & Routing ...

Monitoring
Netzwerk-Monitoring Software (18)

Frage von Ghost108 zum Thema Monitoring ...

Windows 10
Seekrank bei Windows 10 (17)

Frage von zauberer123 zum Thema Windows 10 ...

Windows Server
gelöst Kopiervorgang schlägt fehl, weil Datei- und Ordnername zu lang sind (14)

Frage von Schroedi zum Thema Windows Server ...