über batch nen text kürzen
Hi, ich habe folgendes Problem.
Ich habe eine Liste meiner pdf-Datein. (alle liegen in verschiedenen Ordner)
diese sieht ungefähr so aus:
c:\verschiedenes\12345\blabla.pdf
c:\verschiedenes\4r232\blub.pdf
c:\verschiedenes\2jd983\nocheine.pdf
Nun möchte ich aber nur die Ordner aufgelistet haben, also ungefähr so
c:\verschiedenes\12345
c:\verschiedenes\4r232
c:\verschiedenes\2jd983
also alle Zeichen in der Textdatei von .pdf bis zum ersten / löschen.
ist die über ein Batch-skript zu realisieren?
Ich habe eine Liste meiner pdf-Datein. (alle liegen in verschiedenen Ordner)
diese sieht ungefähr so aus:
c:\verschiedenes\12345\blabla.pdf
c:\verschiedenes\4r232\blub.pdf
c:\verschiedenes\2jd983\nocheine.pdf
Nun möchte ich aber nur die Ordner aufgelistet haben, also ungefähr so
c:\verschiedenes\12345
c:\verschiedenes\4r232
c:\verschiedenes\2jd983
also alle Zeichen in der Textdatei von .pdf bis zum ersten / löschen.
ist die über ein Batch-skript zu realisieren?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 155894
Url: https://administrator.de/forum/ueber-batch-nen-text-kuerzen-155894.html
Ausgedruckt am: 17.05.2025 um 04:05 Uhr
5 Kommentare
Neuester Kommentar

hallo
zuerst ein paar fragen
1. liegen alle ordner in c:\verschiedenes?
2. sind die ordnernamen immer gleich aufgebaut?
3. sind die dateinamen immer gleich aufgebaut?
Grüsse Switcher
zuerst ein paar fragen
1. liegen alle ordner in c:\verschiedenes?
2. sind die ordnernamen immer gleich aufgebaut?
3. sind die dateinamen immer gleich aufgebaut?
Grüsse Switcher

Hallo extended!
Das ließe sich mit einem VB-Script (*.vbs) in etwa so machen (Pfad-Konstanten anpassen):
In der Codezeile 12 könnte anstatt (ListeNeu) auch (ListeAlt) stehen, wobei dann die bestehende List-Datei überschrieben wird.
Desweiteren, werden nur Verzeichnispfade aufgelistet, die auch tatsächlich existieren.
Gruß Dieter
Das ließe sich mit einem VB-Script (*.vbs) in etwa so machen (Pfad-Konstanten anpassen):
Const ListeAlt = "C:\Test\Liste.Txt" 'Datei-Liste mit Dateipfaden
Const ListeNeu = "C:\Test\ListeNeu.Txt" 'Datei-Liste mit Verzeichnispfaden
Dim Fso, File, Text, TextZeile, Folder
Set Fso = CreateObject("Scripting.FileSystemObject")
Set File = Fso.OpenTextFile(ListeAlt)
Text = Split(File.ReadAll, vbCrLf): File.Close
Set File = Fso.CreateTextFile(ListeNeu)
For Each TextZeile In Text
Folder = Fso.GetParentFolderName(TextZeile)
If Fso.FolderExists(Folder) Then File.WriteLine Folder
Next
File.Close
Desweiteren, werden nur Verzeichnispfade aufgelistet, die auch tatsächlich existieren.
Gruß Dieter
Hallo extended!
Ergänzend zu den obigen Vorschlägen eine "minimale" und eine "extended
"-Variante in Batch:
Wenn Du mit dem "\" am Ende des Pfades und ev Dubletten im Ergebnis leben kannst, wäre die einfachste Möglichkeit (gleich direkt an der Kommandozeile einzugeben):
Um sowohl den "\" zu verhindern als auch im Ergebnis Mehrfachnennungen des Pfades zu vermeiden, wäre dann doch ein Batch erforderlich:
Grüße
bastla
Ergänzend zu den obigen Vorschlägen eine "minimale" und eine "extended
Wenn Du mit dem "\" am Ende des Pfades und ev Dubletten im Ergebnis leben kannst, wäre die einfachste Möglichkeit (gleich direkt an der Kommandozeile einzugeben):
for /f "usebackq delims=" %i in ("D:\Liste Deiner PDF.txt") do @echo %~dpi
Um sowohl den "\" zu verhindern als auch im Ergebnis Mehrfachnennungen des Pfades zu vermeiden, wäre dann doch ein Batch erforderlich:
@echo off & setlocal
set "Ein=D:\Liste Deiner PDF.txt"
set "Aus=D:\Liste der Ordner Deiner PDF.txt"
::Ausgabedatei leer erzeugen (muss für "findstr" bereits existieren)
type nul>"%Aus%"
:: Schleife über alle Zeilen der Eingabedatei,
:: wobei der Pfad in der gleichnamigen Variable zwischengespeichert und
:: für jeden Pfad das eigentliche Verarbeitungs-Unterprogramm aufgerufen wird
for /f "usebackq delims=" %%i in ("%Ein%") do set "Pfad=%%~dpi" & call :ProcessLine
:: Ergebnis zur Kontrolle ausgeben
type "%Aus%"
:: Ende des Hauptprogrammes
goto :eof
:ProcessLine
:: Wenn kein Root-Ordner, abschließenden \ abschneiden
if "%Pfad:~-2%" neq ":\" set "Pfad=%Pfad:~,-1%"
:: Falls die Ausgabedatei bereits den Pfad enthält,
:: kein Eintrag erforderlich und daher Rücksprung in das Hauptprogramm
findstr /i /x "%Pfad:\=\\%" "%Aus%">nul && goto :eof
:: Pfad der Ausgabedatei hinzufügen
>>"%Aus%" echo %Pfad%
:: Zurück zum Hauptprogramm
goto :eof
bastla
Moin extended.
keine Ahnung, ob das auch über ein Batchskript realisierbar wäre.
Ich würde es einfach über eine Halbzeile vom CMD-Prompt abfackeln.
Beispiel mit meinen *.pdfs im Verzeichnis d:\Biber\Dokus und darunter:
das führende ">" in der Eingabezeile ist Teil meines Prompts - nicht mit eingeben
Müsste auch mit einem Verzeichnis "c:\verschiedenes" klappen.
Grüße
Biber
keine Ahnung, ob das auch über ein Batchskript realisierbar wäre.
Ich würde es einfach über eine Halbzeile vom CMD-Prompt abfackeln.
Beispiel mit meinen *.pdfs im Verzeichnis d:\Biber\Dokus und darunter:
das führende ">" in der Eingabezeile ist Teil meines Prompts - nicht mit eingeben
(=15:15:43 d:\Biber\temp=)
>for /r "d:\Biber\Dokus" /d %i in (*) do @if exist "%i\*.pdf" @echo %i
d:\Biber\Dokus\BusinessObjects
d:\Biber\Dokus\DB2
d:\Biber\Dokus\ErWin
d:\Biber\Dokus\Excel
d:\Biber\Dokus\Links
d:\Biber\Dokus\M$Scripting
d:\Biber\Dokus\Oracle
d:\Biber\Dokus\SQL
d:\Biber\Dokus\ToolDoku
d:\Biber\Dokus\VBS
d:\Biber\Dokus\DB2\Addons_PDB
d:\Biber\Dokus\DB2\Diverse addons
d:\Biber\Dokus\M$Scripting\PowerShell_Workshop
d:\Biber\Dokus\Oracle\Oracle-Tuts
Müsste auch mit einem Verzeichnis "c:\verschiedenes" klappen.
Grüße
Biber