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 Umlaute in Pfadangaben

Mitglied: goodbytes

goodbytes (Level 2) - Jetzt verbinden

01.12.2014, aktualisiert 09:44 Uhr, 1631 Aufrufe, 8 Kommentare

Hallo,
ich stehe leider immer noch vor dem leidigen Thema Umlaute in Batches...
Bei Dateinamen und in den Pfaden für das Verschieben von Dateien sind öfters Umlaute enthalten.
Wie kann ich das am einfachsten in der Batch händeln?

Zur Info...
Die Dateinamen und Pfadangaben werden aus einer txt-Datei gelesen und verarbeitet. Eventuell könnte ich alle eventuell auftretenden Umlaute in dieser txt-Datei zu Beginn meiner Verschiebe-Batch erst durch Zeichen, welche dann auch korrekt gelesen werden können, ersetzen? Hätte in diesem Fall jemand eine Vorlage?

Danke im Voraus!
Gruß
Torsten
Mitglied: Meierjo
LÖSUNG 01.12.2014, aktualisiert um 09:44 Uhr
Hallo

Probier mal anfang der Batch

rem Codepage ändern, damit ä ö ü Zeichen im Dateinamen richtig übersetzt werden
chcp 1252 > nul

Gruss Urs
Bitte warten ..
Mitglied: goodbytes
01.12.2014 um 09:45 Uhr
Hallo Urs,
stimmt, das ist natürlich das Einfachste...
geht einwandfrei, vielen Dank!

Gruß
Torsten
Bitte warten ..
Mitglied: Friemler
LÖSUNG 01.12.2014, aktualisiert um 11:56 Uhr
Hallo Torsten,

am besten Du speicherst die txt-Datei mit den Pfadangaben in der Zeichencodierung / Codepage OEM850. Das ist das Codierungsschema, das standardmäßig von der Windows-Konsole verwendet wird. Ein Texteditor, der diese Codierung beherrscht, ist z.B. Notepad++.

Gruß
Friemler


[EDIT]
Da war ich zu langsam...
[/EDIT]
Bitte warten ..
Mitglied: goodbytes
01.12.2014 um 09:59 Uhr
Ok, Danke!
Bitte warten ..
Mitglied: goodbytes
01.12.2014 um 14:50 Uhr
Aber mal noch eine kurze andere Frage zwecks einer for-Schleife, vielleicht hat da auch noch jemand einen Tipp...

Ich lese eine Testdatei zeilenweise ein mittels:
01.
for /f "tokens=1 delims=\" %%i in (Test.txt) do (echo "%%i")
Wie kann ich nur den LETZTEN Teil ermitteln, also den String nach dem letzten "\"?

Gruß
Torsten
Bitte warten ..
Mitglied: Friemler
LÖSUNG 01.12.2014, aktualisiert 02.12.2014
Hallo Torsten,

in Batchscript gibt es Operatoren zur Zerlegung von Pfadangaben, die

  • in Laufvariablen von FOR-Schleifen oder
  • in Parameter-Variablen (%1, %2, usw.)

gespeichert sind.

Wenn Du also aus einer Pfadangabe, die aus einer Textdatei kommt, den letzten Pfadbestandteil extrahieren möchtest, könntest Du das so machen:

for /f "usebackq delims=" %%i in ("Test.txt") do (echo "%%~nxi")
Ich habe hier die Option usebackq verwendet, da man dann den Pfad zur Eingabedatei in der Klammer von FOR in Anführungszeichen einschließen und somit auch eine Dateie verarbeiten kann, deren Pfad bzw. Name Leerzeichen enthält.

Das Extrahieren des Dateinamens (oder eben genauer gesagt des letzten Pfadbestandteils) übernimmt das nx in %%~nxi. Dabei steht n für Name und x für Extension (incl. Punkt).

Ein ausführliches Tutorial rund um den FOR-Befehl, verzögerte Variablenerweiterung, die o.g. Operatoren zur Pfadzerlegung u.v.m. findest Du hier.

Gruß
Friemler
Bitte warten ..
Mitglied: goodbytes
02.12.2014, aktualisiert um 09:46 Uhr
Hallo Friemler,
das funktioniert bestens, vielen Dank!

Da ich die einzelnen Bestandteile jeder Zeile für die Weiterverarbeitung benötige habe ich es jetzt folgendermaßen gemacht. Ich hab immer eine Zeile komplett in eine Variable eingelesen und dann weiter "zerpflückt".

Hier erstmal eine Beispiel-Quelldatei:
01.
Bezeichnung 1;D:\Test Ordner\Datei 1.txt 
02.
Bezeichnung 2;D:\Test Ordner\Datei 2.txt
Und nun meine Batch:
01.
@ECHO OFF & chcp 1252 
02.
 
03.
for /f "tokens=*" %%i in (Test.txt) do (^ 
04.
for /f "tokens=1 delims=;" %%j in ("%%i") do (^ 
05.
for /f "tokens=2 delims=;" %%k in ("%%i") do (^ 
06.
for /f "delims=" %%l in ("%%i") do (^ 
07.
call :RUN "%%i" "%%j" "%%k" "%%~nxi")))) 
08.
EXIT 
09.
 
10.
:RUN 
11.
echo Ganze Zeile %1% >> Ergebnis.txt 
12.
echo Bezeichnung %2% >> Ergebnis.txt 
13.
echo Pfad inkl. Dateiname %3% >> Ergebnis.txt 
14.
echo Dateiname %4% >> Ergebnis.txt 
15.
echo. >> Ergebnis.txt
Weiß nicht ob man da noch was optimieren könnte aber es funktioniert so prima und ist übersichtlich finde ich.

Vielen Dank Meierjo und Friemler !!!

Gruß
Torsten
Bitte warten ..
Mitglied: Friemler
02.12.2014, aktualisiert um 20:27 Uhr
Hallo Torsten,

na ja, Optimierungspotenzial findet sich in fast jedem Code . Bei Deinem Code sind es vor allem zwei überflüssige FOR-Schleifen (das sind Performance-Fresser):

01.
@echo off & setlocal 
02.
 
03.
set "InFile=Test.txt" 
04.
set "OutFile=Ergebnis.txt" 
05.
 
06.
chcp 1252 > NUL 
07.
 
08.
for /f "usebackq delims=" %%a in ("%InFile%") do ( 
09.
  for /f "tokens=1,2 delims=;" %%b in ("%%a") do ( 
10.
    call :ProcessLine "%%a" "%%b" "%%c" "%%~nxc" 
11.
12.
13.
 
14.
chcp 850 > NUL 
15.
 
16.
exit /b 0 
17.
 
18.
 
19.
:ProcessLine 
20.
  (echo Ganze Zeile: %~1 
21.
   echo Bezeichnung: %~2 
22.
   echo Pfad inkl. Dateiname: %~3 
23.
   echo Dateiname: %~4 
24.
   echo. 
25.
  ) >> "%OutFile%" 
26.
exit /b
Wenn in dem Unterprogramm ProcessLine die Strings wirklich nur ausgegeben werden sollen, kann man die Ausgabe auch direkt in der FOR-Schleife erledigen. Das hat außerdem den Vorteil, dass auch Zeichenketten ausgegeben werden könnten, die Batch-Sonderzeichen wie <|>&! enthalten, da zur Ausgabe die Laufvariablen der FOR-Schleife benutzt würden. Bei deren Verarbeitung ist der Batchscript-Interpreter nicht so zickig wie bei "normalen" Batchvariablen.

Was gerade bei einer großen Anzahl an Ausgaben einen enormen Geschwindigkeitsgewinn bringt, ist die Klammerung von Ausgabeoperationen so wie im Unterprogramm ProcessLine. Die Ausgabedatei muss dann nur einmal geöffnet werden, was viel Zeit spart. Bei den 5 Zeilen, die durch ProcessLine zusammengefasst werden, bringt das bei z.B. 100000 Aufrufen so gut wie nichts. Wenn jedoch auf das Unterprogramm verzichtet werden kann, ist der folgende Code beträchtlich schneller:

01.
@echo off & setlocal 
02.
 
03.
set "InFile=Test.txt" 
04.
set "OutFile=Ergebnis.txt" 
05.
 
06.
chcp 1252 > NUL 
07.
 
08.
(for /f "usebackq delims=" %%a in ("%InFile%") do ( 
09.
   for /f "tokens=1,2 delims=;" %%b in ("%%a") do ( 
10.
     echo Ganze Zeile: %%a 
11.
     echo Bezeichnung: %%b 
12.
     echo Pfad inkl. Dateiname: %%c 
13.
     echo Dateiname: %%~nxc 
14.
     echo. 
15.
16.
)) > "%OutFile%" 
17.
 
18.
chcp 850 > NUL
Statt tokens=1,2 kann man auch tokens=1* schreiben, dann könnte (in diesem Fall) der Dateipfad auch das als Trennzeichen verwendete Semikolon enthalten.

Gruß
Friemler
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Robocopy mit Strichen (minus) in den Pfadangaben

gelöst Frage von blue0711Batch & Shell6 Kommentare

Hallo, ich muss einige 1000 Dateien aus einer verschachtelten Struktur verschieben, bei der ich allerdings Unterordner ausschließen muss. Soweit ...

Batch & Shell

For-Schleife Leerzeichen in Pfadangabe

gelöst Frage von goodbytesBatch & Shell3 Kommentare

Hallo, mittels For-Schleife sollen zeilenweise Pfadangaben aus einer txt-Datei geholt werden und damit was abgearbeitet werden. Ist ja soweit ...

Batch & Shell

Batch: Pfadangabe in Datei ändern

gelöst Frage von NephrisBatch & Shell6 Kommentare

Ich musste mich bislang nur sehr rudimentär mit batch beschäftigen. Nun komme gelange ich deutlich an meine Grenze, und ...

Outlook & Mail

Abwesenheitsassistent keine Umlaute

Frage von Rod160Outlook & Mail1 Kommentar

Hallo liebe Administratoren, habe folgendes Problem: unser Abwesenheitsassistent gibt nach extern keine Umlaute aus, intern funktionieren die Umlaute problemlos. ...

Neue Wissensbeiträge
Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 8 StundenInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 21 StundenErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Windows 10

Windows 10 on ARM: von Microsoft entfernte Info - Klartext, was nicht geht

Information von kgborn vor 23 StundenWindows 10

Windows 10 on ARM ist ja eine neue Variante, die Microsoft im Verbund mit Geräteherstellern am Markt etablieren will. ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgborn vor 23 StundenMicrosoft14 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Heiß diskutierte Inhalte
Server
Route-Befehl Unterstützung (unter CMD)
gelöst Frage von FKRR56Server35 Kommentare

Guten Tag , i.M. habe ich Probleme über den CMD-Route-Befehl ein Routing auf einen entfernten Server zuzulassen. Der Server ...

Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1028 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Humor (lol)
Was könnte man mit einem Server machen? Idee gesucht
Frage von 2SeitenHumor (lol)15 Kommentare

Hey Zusammen Ich habe einen alten HP G2 Rackserver zu Hause rumliegen. 28GB Ram, 1xAMD Prozi mit etwa 2GHz. ...

Firewall
RB2011 Firewall Rule eine bestimmte Mac oder IP Adresse nicht zu blockieren
Frage von lightmanFirewall15 Kommentare

Hallo liebes Forum mit ihren Spezialisten. Ich habe meine Firewall so konfiguriert das kein Endgerät ohne meine Speziellen Erlaubnis ...