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

Auslesen einer (Teil)-Zeile, Inhalt zum Dateinamen machen und speichern

Frage Entwicklung

Mitglied: derfriedhelm

derfriedhelm (Level 1) - Jetzt verbinden

30.01.2012, aktualisiert 11:04 Uhr, 2542 Aufrufe, 8 Kommentare

Hallo und guten Tag, werte Mitstreiter,

als Neuling hoffe ich das richtige Forum gefunden zu haben.

Hier die Beschreibung meines Problems:

Durch ein Anwenderprogramm erhalte ich aufgeteilte Listen einer Abrechnung, die ich aber nicht weiter beeinflussen kann.
Insbesonders störend wirkt sich hierbei die absolut feste Länge (15 Zeichen !!!) des Dateinamens aus.

In der jeweiligen Datei (es handelt sich um ca. 250 Dateien), die im gleichen Verzeichnis liegen, steht an der gleichen Stelle,
nämlich Zeile 3 Position 1 bis 44 der Name, den ich als Bezeichnung benötige, um zu erkennen, wer diese Liste erhält.

Diese Zeile 3 möchte ich auslesen und die jeweilige Datei dann mit diesem Namen abspeichern.

Die Aktion sollte also so ablaufen, dass entweder alle Dateien oder einzeln nacheinander geöffnet werden, die o.g. Zeile ausgelesen,
die aktuelle Datei unter diesem ausgelesenen Namen gespeichert wird, und dann so weiter bis alle Dateien erledigt sind.

Gibt es für ein solches Problem eine Möglichkeit zur Lösung in ultraEdit ?

Vielen Dank, werde jeden Tipp ausprobieren und berichten
friedhelm
.

432efa58838221931a99c846c0f857c7 - Klicke auf das Bild, um es zu vergrößern
Mitglied: bastla
30.01.2012 um 12:36 Uhr
Hallo derfriedhelm und willkommen im völlig richtigen Forum!

Das sollte sich per Batch lösen lassen - etwa:
01.
@echo off & setlocal 
02.
::set "Ordner=D:\Ordner mit 250 Dateien" 
03.
 
04.
::pushd "%Ordner%" 
05.
for /f "delims=" %%i in ('dir /b/a-d') do call :ProcessFile "%%i" 
06.
::popd 
07.
pause 
08.
goto :eof 
09.
 
10.
:ProcessFile 
11.
if /i "%~nx0"=="%~nx1" goto :eof 
12.
set "Zeile3=" 
13.
for /f "usebackq skip=2 delims=" %%a in (%1) do if not defined Zeile3 set "Zeile3=%%a" 
14.
echo ren %1 "%Zeile3:~,44%" 
15.
goto :eof
Solange am Anfnag der Zeile 13 das echo steht, werden die Dateien nicht wirklich umbenannt, sondern es wird nur der Befehl angezeigt - wenn's gut aussieht, einfach das echo entfernen und Ernst machen ...

Es werden übrigens alle Dateien (außer es gäbe einen gleich bleibenden Namensbestandteil, mit dem eine Einschränkung vorgenommen werden könnte - dann zB
for /f "delims=" %%i in ('dir /b/a-d bherzogenr*') do call :ProcessFile "%%i"
schreiben) verarbeitet - daher bitte die Batchdatei nicht im selben Ordner platzieren ...

Grüße
bastla

[Edit] Zeile 11 angepasst, damit die Batchdatei selbst bei der Verarbeitung übersprungen wird; Zeilen 2, 4 und 6 auskommentiert [/Edit]
Bitte warten ..
Mitglied: derfriedhelm
30.01.2012 um 14:29 Uhr
Hallo und guten Tag, bastla,

vielen Dank für Deine schnelle Reaktion und Hilfe. Ich erhalte mit der folgenden Datei:

@echo off & setlocal
set "Ordner=D:\A50\50_1\LÄMMkom\Versand\Einrichtung_täglich"

pushd "%Ordner%"
for /f "delims=" %%i in ('dir /b/a-d') do call :ProcessFile "%%i"
popd
pause
goto :eof

:ProcessFile
set "Zeile3="
for /f "usebackq skip=2 delims=" %%a in (%1) do if not defined Zeile3 set "Zeile3=%%a"
echo ren %1 "%Zeile3:~,44%"
goto :eof

nachstehende Fehlermeldung:

C:\WINDOWS\system32\cmd.exe (Titelzeile)
Das System kann den angegebenen Pfad nicht finden.
ren "auslesen_umbenennen_speicher.bat" "pushd "%Ordner%""
Drücken Sie eine beliebige Taste . . .

Der Pfad in D: ist korrekt; muss ich die Hoch-/ Anführungszeichen stehen lassen?

Bis hierhin nochmals danke
Friedhelm
.

sorry - zu früh "geschossen" !

ich habe die bat-datei nicht in das Verzeichnis der umzuändernden Dateien abgelegt ( siehe oben).
Jetzt habe ich dies versucht und erhalte eine Übersicht der umzubenennenden Dateien.
Werde es jetzt mit dem Wegnehmen des "echo" versuchen.

Danke
Friedhelm
.



Der Teufel steckt im Detail - aber wem sage ich dies!

Die eingeschaltete "echo"-Funktion zeigt die unzubenennenden Dateien "alt" - "neu" an - prima.
Wenn die bat-Datei im gleichen verzeichnis liegt, wird sie - wie Du schon gesagt hast - auch umgewandelt.
Durch die Änderung der namen habe ich jetzt gesehen, dass einige auch andere Längen haben.
Es gibt eine Gemeinsamkeit unabhängig von der Länge - die Anzahl der Zeichen, die auszulesen sind enden imemr mit einem Leerzeichen und dann ein Doppelpunkt.
1. Was mus ich machen, damit die zuerst beschriebene Fehlermeldung verschwindet?
2. Gibt es eine Chance, dass "Leerzeichen mit anschlißendem Doppelpunkt" zur Begrenzug genutzt werden ? - ansonsten habe ich im Dateinamen die Befürchtung Leerzeichen zu erhalten.

Nochmals Dank
Friedhelm
.
Bitte warten ..
Mitglied: bastla
30.01.2012 um 14:55 Uhr
Hallo derfriedhelm!
Der Teufel steckt im Detail
In der Tat - in diesem Fall in den Umlauten des Pfades ...

Ich ändere mal die Batchdatei, so dass sie sich nicht selbst "verarbeitet" - dann sollte sie im selben Ordner wie die Dateien liegen, womit auch die Zeilen 2, 4 und 6 entbehrlich werden.

Zu den Dateinamen: Handelt es sich bei dem angesprochenen Doppelpunkt oder dem Leerzeichen jeweils um den/das erste/n in der Zeile?

Grüße
bastla
Bitte warten ..
Mitglied: derfriedhelm
30.01.2012 um 15:12 Uhr
Hallo bastla,

sorry, dass ich Dir soviel Arbeit mache, aber

nein das Leerzeichen und der folgende Doppelpunkt stehen jeweils nach dem auszulesenden Namen.

Beispiel:

Einrichtung haus xy :
Einrichtung haus 2 xy :

oder abstrakt

Bezeichnung (längenvariabel) gefolgt von einem Leerzeichen und anschließend dem Doppelpunkt

Danke
Friedhelm
.
Bitte warten ..
Mitglied: bastla
30.01.2012 um 15:26 Uhr
Hallo derfriedhelm!

Ich hatte gemeint, ob es vor dem besagten Doppelpunkt in der Zeile noch einen weiteren geben könnte - falls nein (und in allen Fällen das Zeichen unmittelbar vor dem Doppelpunkt weggelassen werden soll/kann), dann etwa so:
01.
@echo off & setlocal 
02.
for /f "delims=" %%i in ('dir /b/a-d') do call :ProcessFile "%%i" 
03.
pause 
04.
goto :eof 
05.
 
06.
:ProcessFile 
07.
if /i "%~nx0"=="%~nx1" goto :eof 
08.
set "Zeile3=" 
09.
for /f "usebackq skip=2 delims=:" %%a in (%1) do if not defined Zeile3 set "Zeile3=%%a" 
10.
echo ren %1 "%Zeile3:~,~-1%" 
11.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: derfriedhelm
30.01.2012 um 15:42 Uhr
Hallo bastla,

wenn ich die "echo-Funktion" in der Zeiole 10 stehen lasse, erhalte ich folgende Zeilen (Beispiel):

ren "bweeze_petrushe" "Zeile3:~´~-1"
ren "bzuelpicj_krank" "Zeile3:~`~-1"
usw.

wenn ich echo entferne, erhalte ich Folgendes:

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

Es scheint, als würde der Name nicht ausgelesen.

Danke nochmals für Deine Hilfe.

Grüße
Friedhelm
.
Bitte warten ..
Mitglied: bastla
30.01.2012 um 15:53 Uhr
Hallo derfriedhelm!

Wenn ich den erwische, der die zweite Tilde in der Zeile 10 verbrochen hat - so sollte das besser gehen:
echo ren %1 "%Zeile3:~,-1%"
Grüße
bastla
Bitte warten ..
Mitglied: derfriedhelm
30.01.2012 um 16:16 Uhr
Hallo bastla,

super - so kann eine Hilfe zur wirklichen Unterstützung werden.
Danke für Deine Geduld - die Umwandlung hat funktioniert - bis auf die Dateinamen, die leider auch Umlaute verwendet haben.
Hier muss ich mir überlegen, ob ich die Schreibweise in den Stammdaten anpassen kann - wird nicht so einfach,
da es hierbei teilweise eingetragene Namen oder z.B. Ortsnamen sind.

Aber das scheint mir im Moment das kleinste Problem.

Danke
Friedhelm
.
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...