in Batch splitten
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
angabe
attribut
auslese
code
datei
dateiname
endung
extension
file
http
laufwerk
letter
option
parameter
pfad
stehen
string
test
url
verzeichnis
-
HI also ich habe eine txtDatei a_data.txt mit Hunderten von Pfadangaben
C:ordner1\ordner2\ordner3\ordner4\datei.endungx C:ordner1\ordner2\ordner3\ordner4\datei2.endungx C:ordner1\ordner2\ordner3\ordner4\datei3.endungx
Mittels for-schleife kann ich ja jetzt jeden einzelne Zeile und somit jeden Pfad auslesen:
for /f "tokens=*" %%i in (a_data.txt) do( echo %%i )
das klappt alles fehlerfrei aber jetzt möchte ich,aus jeder Zeile
1) Den Pfad (ohne letzes \)
2) Den Dateinamen (ohne Endung) (ohne .)
3) Die Dateiendung (ohne .)
BSP:
C:ordner1\ordner2\ordner3\ordner4\datei.endungx C:ordner1\ordner2\ordner3\ordner4 datei endungx
Ich möchte das mit batch machen, weil viele Abläufe die vorher in meiner Datei stehen, einfach am einfachsten mit batch zu realisieren waren.
Ich hoffe ihr könnt mir da helfen!
P.S: das ist nicht böse gemeint, und ich freue mich über jede Hilfe die ich bekommen kann, doch bitte lest euch erst mal alles in Ruhe durch und postet dann, sonst bringt mich das nicht weiter!
MVG
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
probirs mal mit "dir".
hier alle möglichen parameter:
DIR [Laufwerk:][Pfad][Dateiname] [/A[[:]Attribute]] [/B] [/C] [/D] [/L] [/N] [/O[[:]Folge]] [/P] [/Q] [/S] [/T[[:]Zeit]] [/W] [/X] [/4] [Laufwerk:][Pfad][Dateiname] Bezeichnet Laufwerk, Verzeichnis und/oder Dateien. /A Listet Dateien mit angegebenen Attributen auf. Attribute D Verzeichnisse R Schreibgeschützte Dateien H Versteckte Dateien A Zu archivierende Dateien S Systemdateien - vorangestellt kehrt die Bedeutung um /B Einfaches Format (keine Kopfdaten, keine Zusammenfassung). /C Zeigt das Tausendertrennzeichen bei Dateigrößen an (Standard- einstellung). Verwenden Sie /-C, um das Tausendertrennzeichen nicht anzuzeigen. /D Gleich wie Breitformat, jedoch nach Spalten sortiert. /L Verwendet Kleinschreibung. /N Neues, langes Listenformat (Dateinamen auf der rechten Seite). /O Gibt die Liste sortiert aus. Folge N Name (alphabetisch) S Größe (kleinere zuerst) E Erweiterung (alphabetisch) D Datum/Zeit (ältere zuerst) G Verzeichnisse zuerst - vorangestellt kehrt die Reihenfolge um /P Pausiert nach jeder vollen Bildschirmseite. /Q Gibt den Besitzer der Datei aus. /S Listet Dateien und alle Unterverzeichnisse auf. /T Bestimmt welche Zeit verwendet wird (nur für NTFS). Zeit C Erstellung A Letzter Zugriff W Letzter Schreibzugriff /W Verwendet Breitformat für die Auflistung. /X Zeigt die Kurznamen für Dateien mit Nicht-8Punkt3-Namen an. Das Format ist das gleiche wie bei /N, wobei der Kurzname vor dem Langnamen eingefügt wird. Wenn kein Kurzname vorhanden ist, werden Leerzeichen angezeigt. /4 Zeigt das Jahr vierstellig an. Optionen können in der Umgebungsvariablen DIRCMD voreingestellt werden. "-" vor einer Option setzt die Voreinstellung außer Kraft, z.B. DIR /-W.
um deine suchergebnisse in eine datei zu leiten:
dir [parameter] > [datei]
beispiel:
dir "C:" /B > "C:\test\test.txt" -
Ich denke, dieses Tutorial bietet dir alle notwendigen Möglichkeiten, deinen String zu zerfrickeln:
http://www.dostips.com/DtTipsStringManipulation.php
Edit: ich wußte nicht, dass DOS so mächtig ist
Beitrag zuletzt geändert: 13.3.2010 11:06:31 von burgi -
Na toll also erstmal danke
@burgi
auf der Seite war ich schon... und naja kein Wort verstanden (nicht weil ich kein Englisch kann, sondern weils einfach meiner Meinung nach nicht so gut beschrieben ist)
Außerdem kann ich den String eh nicht splitten, weil ich ja garnicht die Anzahl der Ordner und Unterordner bis zum Dateinamen und Seiner Endung stehen. Ich könnte nach '.' splitten aber das würde mir nur die Endung einbringen und den Pfad mit dem Dateinamen. Ich brauche aber den Dateinamen! Also das mit dem Splitten soll eher so gemeint sein, dass ich mit einer Funktion einfach meine 3 Werte auslesen kann :
1) Den Pfad (ohne letzes \)
2) Den Dateinamen (ohne Endung) (ohne .)
3) Die Dateiendung (ohne .
@rb-online
ich habs so versucht:
for /f "tokens=*" %%i in (a_data.txt) do ( echo %%i dir %%i > b_data.txt )
dann sagt er mir, dass er die Datei nicht finden kann. Außerdem klappt dir nur bei Pfadangeben, wobei ich in 55o ja nen Pfad hab. doch selbst dann könnte ichmit dir nicht
1) Den Pfad (ohne letzes \)
2) Den Dateinamen (ohne Endung) (ohne .)
3) Die Dateiendung (ohne .
auslesen.
MVG -
So, hab' das gefunden, und auch getestet:
http://stackoverflow.com/questions/636381/what-is-the-best-way-to-do-a-substring-in-a-batch-file
ich habe eine Text-Datei zum testen mit dem Inhalt
C:\test1\test2\justatest.txt D:\xtest1\xtest2\blabla.gif
mit diesem Batch-Code:
@echo off cls for /f "tokens=*" %%i in (test.txt) do ( echo Angaben zur Datei: echo filename: %%~ni echo file extension: %%~xi echo drive Letter: %%~di echo file path: %%~pi echo fertig! echo. )
bekam ich diesen Output:
Angaben zur Datei: filename: justatest file extension: .txt drive Letter: C: file path: \test1\test2\ fertig! Angaben zur Datei: filename: blabla file extension: .gif drive Letter: D: file path: \xtest1\xtest2\ fertig! C:\>
Du musst halt das nicht ausgeben, sondern in eine Variable umlenken, solltest du damit Dateien kopieren wollen, oder was auch immer.
Besser? -
Besser?
richtig hamma! Läuft perfekt zuverlässig und ohne viel Code!!
Genau so hab ichs mir bestenfalls vorgestellt!!
Vielen vielen Dank!!
MVG -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage