ü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?
Please also mark the comments that contributed to the solution of the article
Content-Key: 155894
Url: https://administrator.de/contentid/155894
Printed on: April 26, 2024 at 08:04 o'clock
5 Comments
Latest comment
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"-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
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