extended

ü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?
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 155894

Url: https://administrator.de/forum/ueber-batch-nen-text-kuerzen-155894.html

Ausgedruckt am: 17.05.2025 um 04:05 Uhr

90776
90776 28.11.2010 um 11:01:36 Uhr
Goto Top
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
MiniStrator
MiniStrator 28.11.2010 um 11:04:37 Uhr
Goto Top
Hallo,

dir /b /s *.>textdatei.txt

Dann hast du zwar ne neue Textdatei aber das wird wurscht sein?

Gruß
76109
76109 28.11.2010 um 11:20:40 Uhr
Goto Top
Hallo extended!

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
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
bastla
bastla 28.11.2010 um 12:32:59 Uhr
Goto Top
Hallo extended!

Ergänzend zu den obigen Vorschlägen eine "minimale" und eine "extendedface-wink"-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):
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
Grüße
bastla
Biber
Biber 28.11.2010 um 15:16:56 Uhr
Goto Top
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

(=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