derfriedhelm
Goto Top

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

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

Content-Key: 179758

Url: https://administrator.de/contentid/179758

Printed on: April 19, 2024 at 20:04 o'clock

Member: bastla
bastla Jan 30, 2012 at 11:36:22 (UTC)
Goto Top
Hallo derfriedhelm und willkommen im völlig richtigen Forumface-wink!

Das sollte sich per Batch lösen lassen - etwa:
@echo off & setlocal
::set "Ordner=D:\Ordner mit 250 Dateien" 

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

:ProcessFile
if /i "%~nx0"=="%~nx1" goto :eof  
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
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]
Member: derfriedhelm
derfriedhelm Jan 30, 2012 at 13:29:09 (UTC)
Goto Top
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
.
Member: bastla
bastla Jan 30, 2012 at 13:55:32 (UTC)
Goto Top
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
Member: derfriedhelm
derfriedhelm Jan 30, 2012 at 14:12:40 (UTC)
Goto Top
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
.
Member: bastla
bastla Jan 30, 2012 at 14:26:51 (UTC)
Goto Top
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:
@echo off & setlocal
for /f "delims=" %%i in ('dir /b/a-d') do call :ProcessFile "%%i"  
pause
goto :eof

:ProcessFile
if /i "%~nx0"=="%~nx1" goto :eof  
set "Zeile3="  
for /f "usebackq skip=2 delims=:" %%a in (%1) do if not defined Zeile3 set "Zeile3=%%a"  
echo ren %1 "%Zeile3:~,~-1%"  
goto :eof
Grüße
bastla
Member: derfriedhelm
derfriedhelm Jan 30, 2012 at 14:42:30 (UTC)
Goto Top
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
.
Member: bastla
bastla Jan 30, 2012 at 14:53:17 (UTC)
Goto Top
Hallo derfriedhelm!

Wenn ich den erwische, der die zweite Tilde in der Zeile 10 verbrochen hat face-wink - so sollte das besser gehen:
echo ren %1 "%Zeile3:~,-1%"
Grüße
bastla
Member: derfriedhelm
derfriedhelm Jan 30, 2012 at 15:16:45 (UTC)
Goto Top
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
.