Forum: PC-Programmierung Batch, Verzeichniss zerlegen und TXT erstellen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Tim B. (boulderelch)


Lesenswert?

Moin,

ich habe eine kleine Aufgabe:

Ich habe mehrere Verzeichnisse nach dem gleichem Schema:

z.B.:

c:\Test\24-0001

c:\Test\24-0023

c:\Test\23-0002

c:\Test\24-0100

c:\Test\24-0002

c:\Test\25-0020

mit Unterverzeichnissen auch fast alle mit dem gleichem Schema:

z.B.:

c:\Test\24-0001\Takt1

c:\Test\24-0001\Takt2

c:\Test\24-0001\Takt5

selten auch:

c:\Test\24-0001\Takt1\Bilder\2401204

c:\Test\24-0001\Takt2\Daten

in den Verzeichnissen sind PDF Dateien:

z.B.

KP_1_300-x-01.T12_Text_ENTW.pdf

KP_2_201-a-10.T04_Text_QS.pdf

KP_4_105-a-02.T01_Text_ENTW.pdf

KP_3_701-b-05-T11_Text_ENTW.pdf

ich  versuche ein Tool zu schreiben....aber alles klappt irgendwie 
nicht, es muss eine Batch Datei sein. was soll passieren,

das Tool sollte das Verzeichnis  durchsuchen und eine TXT erstellen im 
Verzeichnis:

C:\Test\TXT

Ergebnis:

eine TXT Datei:

Name der Datei soll der Verzeichnis Name sein:

z.B.

24-0001.TXT

24-0023.TXT
usw.

in der Datei sollen, aus den PDF-Datei Namen die Nummern rausgefiltert 
werden und in der TXT vorne untereinander stehen  zb.:
(Dateien Ohne Nummer werden nicht berücksichtigt)

Datei 24-0001.txt

300-x-01

201-a-10

105-a-02

701-b-05
usw...

die Datei wird dann im Verzeichnis c:\Test\TXT gespeichert und weiter 
verarbeitet

habt Ihr eine Idee?

Lg Tim

von Franko S. (frank_s866)


Lesenswert?

Was hat denn der Bub bisher in seiner Hausaufgabe selber 
zusammenbekommen?
Fertige Lösungen gibts hier nicht.

von Jens M. (schuchkleisser)


Lesenswert?

Wenn die Nummern immer an der gleichen Stelle im Namen stehen, kann man 
das in einer Batchdatei mit
1
set neuname=%altname:~6,8%
schon mal rausziehen.

Tim B. schrieb:
> (Dateien Ohne Nummer werden nicht berücksichtigt)

Da würde ich die beiden "-" kontrollieren, mit obiger Extraktion und 
"if".
Dann noch ein bissel Zauberei mit "for" und dann geht das.

Als Oldschooler käme mir in den Sinn, eine Textdatei des gesamten 
Verzeichnisbaums via QBasic in entsprechende Files zu teilen, so hab ich 
das vor 20 oder 25 Jahren gemacht, ist schnell zusammengehackt, für umme 
und speziell für solche text-zu-text-Aufgaben sehr viel einfacher als 
Batch.

von Oliver S. (oliverso)


Lesenswert?

Jens M. schrieb:
> Als Oldschooler käme mir in den Sinn, eine Textdatei des gesamten
> Verzeichnisbaums via QBasic in entsprechende Files zu teilen

Als Neuschooler hackt man das mal eben in Python zusammen. Auch wenns 
mit einem Windows-Bacthfile vermutlich auch zu machen ist, tut sich den 
Krampf doch niemand freiwillig an. Wenn überhaupt, dann mit einem 
powershell-script.

Oliver

von Jens M. (schuchkleisser)


Lesenswert?

Batch bzw. eine compilierte QBasic-Datei haben den Vorteil 
installationsfrei auch auf anderen System zu laufen.
Aber ja, heutzutage ist Python ein Allheilmittel für solche Sachen.

von Εrnst B. (ernst)


Lesenswert?

Für eine fertige Lösung:

Einfach den Eröffnungs-Beitrag, so wie er ist, unverändert, in die KI 
kippen, statt in das Forum.
1
@echo off
2
setlocal
3
4
REM Set the base directory
5
set "baseDir=C:\Test"
6
set "outputDir=C:\Test\TXT"
7
8
REM Ensure the output directory exists
9
if not exist "%outputDir%" (
10
    mkdir "%outputDir%"
11
)
12
13
REM Loop through each directory in the base directory
14
for /d %%D in ("%baseDir%\*") do (
15
    REM Get directory name (e.g., 24-0001)
16
    set "dirName=%%~nxD"
17
18
    REM Initialize a temporary file to store numbers
19
    set "tempFile=%baseDir%\%dirName%.temp"
20
    echo. > "%tempFile%"
21
22
    REM Loop through PDF files in the directory and subdirectories
23
    for /r "%%D" %%F in (*.pdf) do (
24
        REM Use a regex to extract the number pattern from the filename
25
        for /f "tokens=2 delims=_." %%G in ('echo %%~nF ^| findstr /r "[0-9][0-9][0-9]-[a-z]-[0-9][0-9]"') do (
26
            echo %%G >> "%tempFile%"
27
        )
28
    )
29
30
    REM If numbers were extracted, rename the temporary file
31
    if exist "%tempFile%" (
32
        move /y "%tempFile%" "%outputDir%\%dirName%.txt" > nul
33
    )
34
)
35
36
REM Clean up any remaining temporary files
37
del /q "%baseDir%\*.temp" 2> nul
38
39
echo Done.
40
endlocal

Debuggen und abgleichen, ob das auch das gewünschte tut, darfst du 
selber.

von Tim B. (boulderelch)


Lesenswert?

Hi

schon mal danke,

das hab ich schon raus bekommen:

dir %Fahrzeug%\%project%\*ENTW*.PDF > %Fahrzeug%\dir.txt /s /b /d /a:-d


for /F "tokens=5,6 delims=_" %%a in ('type %Fahrzeug%\dir.txt ^| findstr 
/v "^MEB "') do (
  echo findstr /v "^T39 %%a  >> %Fahrzeug%\%project%.txt

Ergebnis:

T33.3432.T01
T31.4210.MEB
200-x-00
200-x-xx
213-b-01
500-x-xx
200-x-xx
200-x-00
200-x-xx
200-x-xx
200-x-xx
200-x-xx
200-x-xx
400-x-xx
200-x-xx
200-x-xx
541-d-01
211-a-01
546-a-01




muss noch alle XX beseitigen z.B:
200-x-xx in 200

und die Zeilen T....

lg tim

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Wie wäre es damit, erstmal einen PAP oder ein Struktogramm zu zeichnen?

Danach den Algorithmus in Einzel-Aufgaben zerlegen, diese coden und 
einzeln checken, dann das Ganze zusammenbauen.

Ja, ich weiss, vollkommen "old fashion", funktioniert aber wenigstens 
...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.