Batch, Verzeichniss zerlegen und TXT erstellen

OP #7789842
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

#7789883
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.

#7789893
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

#7789955
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.

OP #7789994
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren