extended
Goto Top

ü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?

Content-Key: 155894

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

Printed on: April 26, 2024 at 08:04 o'clock

Mitglied: 90776
90776 Nov 28, 2010 at 10:01:36 (UTC)
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
Member: MiniStrator
MiniStrator Nov 28, 2010 at 10:04:37 (UTC)
Goto Top
Hallo,

dir /b /s *.>textdatei.txt

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

Gruß
Mitglied: 76109
76109 Nov 28, 2010 at 10:20:40 (UTC)
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
Member: bastla
bastla Nov 28, 2010 at 11:32:59 (UTC)
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
Member: Biber
Biber Nov 28, 2010 at 14:16:56 (UTC)
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