Top-Themen

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 Prozentzeichen in Zeichenketten ersetzen

Mitglied: jentwickler

jentwickler (Level 1) - Jetzt verbinden

08.01.2013 um 12:33 Uhr, 2020 Aufrufe, 4 Kommentare

Hallo zusammen,

zuerst einen Dank an das Forum: sehr informativ.

Leider habe ich (noch) keine Lösung für mein Problem gefunden. Ich habe eine Datei mit URL encodierten Pfaden (%20 für Leerzeichen, %C3%9F für ß, %C3%BC für ü usw.). Diese Pfade möchte in die für batch lesbaren Pfade konvertieren (/ durch \, %20 durch Leerzeichen, %C3%9F durch ß, %C3%BC durch ü usw. ersetzen). Ich verzweifle gerade an der Ersetzung der %20 durch ein Leerzeichen, sowie %C3%BC durch ü.

Meine Datei sieht also folgendermaßen aus:
01.
  2%20Ree%C3%BCddde/2%20DV/IUndS/I_O_B_R.doc 
02.
  2%20Rng%C3%BChme/2%20DV/IUdS/I_R_B.doc 
03.
  2%20Rg%C3%BChme/2%20D/IUndtus/K%20uf%20der%20g%20der%20Rg%20ne.doc
Am Ende möchte ich, dass meine Datei wie folgt aussieht:
01.
  2 Reeüddde\2 DV\IUndS\I_O_B_R.doc 
02.
  2 Rngühme\2 DV\IUdS\I_R_B.doc 
03.
  2 Rgühme\2 D\IUndtus\K uf der g der Rg ne.doc
Folgendes versuche ich gerade:
01.
  set SHORT_PATH_FILE=path.txt 
02.
  for /f "tokens=1,* delims=]" %%A in ('"type %TO_DELETE_FILE%|find /v /n """') do ( 
03.
   	set "LINE=%%B" 
04.
	if defined line ( 
05.
	        call set "LINE=%%LINE:/=\%%" 
06.
	        call set "LINE=%%LINE:%%20= %%" 
07.
	        call set "LINE=%%LINE:%%C3%%BC=ü%%" 
08.
		for /f "delims=" %%X in ('"echo."%%LINE%%""') do %%~X 
09.
	) ELSE (echo) 
10.
  )
Die Zeile 5 geht wunderbar, in der Zeile 6 bekomme ich: Der Befehl "20" ist entweder falsch geschrieben oder konnte nicht gefunden werden. Leider komme ich an der Stelle nicht mehr weiter. Mit setlocal enabledelayedexpansion habe ich auch schon probiert, leider auch ohne Erfolg.

Ich bin für jeden Hinweis dankbar.

Gruß
jentwickler
Mitglied: pieh-ejdsch
08.01.2013, aktualisiert um 18:12 Uhr
moin jentwickler,

die CMD liest den Pfad doch mit Backslash statt Slash ein.

im Batch wird jede potentiell darstellbare Variable auch dargestellt.
somit wird im call nicht die Variable Line aufgelöst, sondern Line: (da: %%Line:%%).

Desweiteren befindest Du Dich inerhalb einer Klammer und somit auf einer Befehlszeile.
Dadurch wirst Du die Variable Line nur zur Laufzeit erhalten:
setlocal enable delayedexpansion 
set "Line=!Line:%C3%BC=ü!" 
endlocal
Da gibt es wiederum die Variable C3 oder aber BC nach welcher aufgelöst wird. (je nach dem was zuerst von Prozentzeichen umschlossen wird) Die Variablen sollten zuvor geleert werden, sonst ist dort irgenetwas Fremdes Drin (jedenfalls auf der CMD-Line mit einfachen Prozentzeichen)
01.
set "C3=" 
02.
set "C3=%%C3%%" 
03.
set "BC=" 
04.
set "BC=%%BC%%" 
05.
echo %C3%BC
Die Parameter %1 - %9 musst Du in eine Sub als die Darzustellenden Zeichenfolgen angeben
(einen entspechenden workaround gibt es von Biber finde grad die Quelle nicht)
01.
call :sub %%1 %%2 %%3 
02.
... 
03.
 
04.
exit /b 
05.
 
06.
:sub 
07.
set "Line=!Line:%20= !" 
08.
set "Line=!Line:%C3%BC=ü!"
Auf der CMD-Line ist es nicht so kompliziert - in etwa gleich so (für die Dateinamen nacher ohne die Option /d ):
01.
 for /d /r "D:\Pfad" %a in (*) do @set "A=%a" &set "N=%~nxa" &cmd /von /c"set "N=!N:%20=!" &set "N=!N:%C3%BC=ü!" & echo ren "!A!" - "!N!" &ren "!A!" "!N!""
Gruß Phil
Bitte warten ..
Mitglied: Friemler
08.01.2013 um 18:14 Uhr
Hallo jentwickler,

der Code da oben hat bei Dir wirklich was anderes gemacht als Fehlermeldungen auszugeben? Na, denn...

Sollte so gehen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
 
03.
set "InFile=path.txt" 
04.
set "OutFile=path_new.txt" 
05.
 
06.
(for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%InFile%"') do ( 
07.
   set "Line=%%b" 
08.
 
09.
   if defined Line ( 
10.
     set "Line=!Line:/=\!" 
11.
     set "Line=!Line:%%20= !" 
12.
     set "Line=!Line:%%C3%%A4=ä!" 
13.
     set "Line=!Line:%%C3%%B6=ö!" 
14.
     set "Line=!Line:%%C3%%BC=ü!" 
15.
     set "Line=!Line:%%C3%%9F=ß!" 
16.
     set "Line=!Line:%%C3%%84=Ä!" 
17.
     set "Line=!Line:%%C3%%96=Ö!" 
18.
     set "Line=!Line:%%C3%%9C=Ü!" 
19.
 
20.
     for %%x in ("!Line!") do echo %%~x 
21.
   ) else ( 
22.
     echo. 
23.
24.
)) > "%OutFile%"
Falls Du möchtest, dass die Ausgabedatei in ANSI-Codierung erzeugt wird, speichere das Script auch in ANSI-Codierung ab, z.B. mit Notepad.

Falls Du möchtest, dass die Ausgabedatei in der Codierung OEM850 (Codepage 850) erzeugt wird oder Du die Ausgabe des Scripts mit einem Batchfile weiterverarbeiten willst, speichere das Script in der Codierung OEM850 ab, z.B. mit Notepad++.

Die Codes für äöüßÄÖÜ sind in ANSI und OEM850 verschieden!

Gruß
Friemler
Bitte warten ..
Mitglied: jentwickler
09.01.2013, aktualisiert um 11:52 Uhr
Hallo pieh-ejdsch,

vielen Dank für Deine Antwort.

Ich denke, dass Du mich nicht ganz verstanden hast: Ich möchte die Zeichenkette %C3%BC durch ü ersetzen. Das macht aber nichts, denn:
  • entscheidend sind für mich die Zeilen:
01.
  setlocal enable delayedexpansion 
02.
  set "Line=!Line:%C3%BC=ü!" 
03.
  endlocal
  • Friemler hat mein Problem gelöst

Gruß
jentwickler
Bitte warten ..
Mitglied: jentwickler
09.01.2013 um 12:00 Uhr
Hallo Friemler,

vielen Dank für Deine Antwort.

Du hast Recht: Die von mir beschriebenen Fehlermeldung bekommt man durch den Code-Schnipsel nicht. Da habe ich wohl zu wenig aus meinem Skript herauskopiert. Außerdem muss die Variable %TO_DELETE_FILE% %SHORT_PATH_FILE% heißen.

Du hast mir aber sehr geholfen. Vielen, vielen Dank.
Bitte warten ..
Ähnliche Inhalte
Datenbanken
SQL Update-Befehl mit Zeichenketten
gelöst Frage von TlBERlUSDatenbanken6 Kommentare

Hi, mein SQL ist etwas eingerostet und finde dazu nichts hilfreiches im Web. SQL-Server 2008 R2; Ist-Zustand: Datenbank-Spalte mit ...

Batch & Shell
Zeichenkette variable kürzen
gelöst Frage von snowdreamBatch & Shell2 Kommentare

Hallo zusammen, ich möchte einen String bearbeiten. Die Anzahl der Zeichen soll allerdings variabel sein, und genau hier komme ...

Batch & Shell
Ordner über Zeichenkette suchen
gelöst Frage von Bayman52Batch & Shell10 Kommentare

Hallo zusammen, nachdem ich jetzt schon ein Woche bastle und suche, brauche ich doch eure Hilfe. Ich habe schon ...

Batch & Shell

Unbekannte Zeichenkette aus txt mit Zeilenangabe auslesen

gelöst Frage von IForeverBatch & Shell4 Kommentare

Hallo Community :) Nach über 4 Stunden herum probieren habe ich es aufgegeben und muss hier um Rat bitten ...

Neue Wissensbeiträge
Vmware
VMware Update für den ESXi 5.5 verfügbar
Information von sabines vor 49 MinutenVmware

Nach dem ganzen Hickhack um Update mit Microcode Anpassungen und Rückzug, gibt es nun für den ESXi 5.5 ein ...

CPU, RAM, Mainboards

Meltdown und Spectre: Intel zieht Microcode-Updates für Prozessoren zurück

Information von keine-ahnung vor 4 StundenCPU, RAM, Mainboards3 Kommentare

Moin, extrem lutztig. Nur gut, dass ich noch nicht beim Probanden-Bingo mitgemacht habe :-) LG, Thomas

Router & Routing
PfSense als Addon auf QNAP
Information von magicteddy vor 18 StundenRouter & Routing3 Kommentare

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 1 TagDatenschutz1 Kommentar

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement26 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Server
TEMP-Profile
gelöst Frage von Forseti2003Windows Server21 Kommentare

Guten Morgen, wer kennt sie nicht, die lieben Temporären Benutzerprofile, vorallem immer dann, wenn man sie am wenigsten braucht. ...

Multimedia & Zubehör
Welches Tablet für die Verkäufer?
Frage von Hendrik2586Multimedia & Zubehör15 Kommentare

Guten Morgen meine Lieben, vielleicht könnt ihr mir ja helfen. Es geht um unsere Außendienstmitarbeiter /Verkäufer. Sie sollen demnächst ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...