
43344
18.02.2008, aktualisiert um 13:19:37 Uhr
Problem mit der Adressierung von Tokens
Morgen zusammen,
ich möchte -stark vereinfacht- über eine Batch Dateien löschen, deren Pfad und Name aus einer .txt gelesen wird. Da ich aber nicht den kompletten Pfad brauchen kann, muss ich die ersten drei Tokens abschneiden.
Soweit bin ich und das funktioniert, leider aber auch nicht mehr
Da es sich um Datei-/Verzeichnisnamen handelt, weiss ich vorher nicht, wie viele Tokens die Schleife "abklappern" muss. Wie kann ich das ermitteln und der Schleife mitgeben???
Danke im Voraus
ich möchte -stark vereinfacht- über eine Batch Dateien löschen, deren Pfad und Name aus einer .txt gelesen wird. Da ich aber nicht den kompletten Pfad brauchen kann, muss ich die ersten drei Tokens abschneiden.
Soweit bin ich und das funktioniert, leider aber auch nicht mehr
dir /S /B > c:\temp\purge\list.txt
for /f "delims=\, tokens=4-15" %%i in ('type list.txt') do (
if exist f:\daten\%%i
del %%i <yes.txt)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 80982
Url: https://administrator.de/forum/problem-mit-der-adressierung-von-tokens-80982.html
Ausgedruckt am: 22.04.2025 um 01:04 Uhr
7 Kommentare
Neuester Kommentar
Moin, Moin,
äh..warum willst du denn den Pfad abschneiden?! Denn wenn es der wirklich der komplette / absolute Pfad ist, ist es Wurst.
Wenn deine 4 Zeilen in einer Batch hintereinander stehen, so kannst du meine 2 Zeilen benutzen. Macht genau das Gleiche!
Ansonsten poste uns mal den Inhalt von "list.txt".
Grüße
Dani
äh..warum willst du denn den Pfad abschneiden?! Denn wenn es der wirklich der komplette / absolute Pfad ist, ist es Wurst.
@echo off
for /f "delims=" %%i in ('dir /s /b') do del "%%i"
Ansonsten poste uns mal den Inhalt von "list.txt".
Grüße
Dani
Hallo Markus,
ok...also du möchtest einfach eine TXT-Liste einlesen, die du mal erstellt hast oder wird diese zur Laufzeit des Batches erzeugt, in dem du auch löschen möchtest?!
Version 0.1:
Durch "a:-d" werden nur Dateien gelöscht - keine Verzeichnisse. Das Minus steht für die Umkehrung der Option "d". "d" heißt normal:"Gebe mir nur Verzeichnisse aus". Nun wird alles ausgegeben,was kein Verzeichnis ist.
Falls der Pfaf immer gleich bleibt, kannst du ihn auch fest definieren:
Somit wird wird immer das Verzeichnis + Unterverzeichnis durchsucht und die Dateien gelöscht.
Grüße
Dani
ok...also du möchtest einfach eine TXT-Liste einlesen, die du mal erstellt hast oder wird diese zur Laufzeit des Batches erzeugt, in dem du auch löschen möchtest?!
Version 0.1:
echo off
for /f "delims=" %%i in ('dir /s /b /a:-d') do del "%%i"
Falls der Pfaf immer gleich bleibt, kannst du ihn auch fest definieren:
set pfad=C:\Dokumente und Einstellungen\%username%\Desktop
for /f "delims=" %%i in ('dir /s /b /a:-d "%pfad%"') do del "%%i"
Grüße
Dani
Was Du machen willst würde dem hier entsprechen:
Prinzipiell benötigst du eine Trennung von Dateien und Verzeichnissen. Denn wenn ein Verzeichnis gelöscht wird existieren die darin enthaltenen Dateien ja nicht mehr und ein löschen wollen würde zur Fehlermeldung führen. Daher wäre so besser:
miniversum
for /f "delims=\ tokens=3,*" %%i in ('dir /S /B') do (
if exist "f:\daten\%%j" (
del /Q "%%j"
)
)
Wobei es so zu Fehler führen kann.if exist "f:\daten\%%j" (
del /Q "%%j"
)
)
Prinzipiell benötigst du eine Trennung von Dateien und Verzeichnissen. Denn wenn ein Verzeichnis gelöscht wird existieren die darin enthaltenen Dateien ja nicht mehr und ein löschen wollen würde zur Fehlermeldung führen. Daher wäre so besser:
for /f "delims=\ tokens=3,*" %%i in ('dir /S /B /AD') do (
if exist "f:\daten\%%j" (
rd /s /Q "%%j"
)
)
for /f "delims=\ tokens=3,*" %%i in ('dir /S /B /A-D') do (
if exist "f:\daten\%%j" (
del /Q "%%j"
)
)
if exist "f:\daten\%%j" (
rd /s /Q "%%j"
)
)
for /f "delims=\ tokens=3,*" %%i in ('dir /S /B /A-D') do (
if exist "f:\daten\%%j" (
del /Q "%%j"
)
)
miniversum
@miniversum
Warum fragst du per IF noch ab wenn das nächste Statement schon der Löschebefehl ist. Macht doch keinen Sinn oder? Genauso mit dem Delims...ob du nun den absoluten oder den relativen Pfad nimmst, ist egal - Entfernt wird es auf jeden Fall. Die Abfrage wird doch nur kleiner und somit übersichtlicher.
Grüße
Dani
Warum fragst du per IF noch ab wenn das nächste Statement schon der Löschebefehl ist. Macht doch keinen Sinn oder? Genauso mit dem Delims...ob du nun den absoluten oder den relativen Pfad nimmst, ist egal - Entfernt wird es auf jeden Fall. Die Abfrage wird doch nur kleiner und somit übersichtlicher.
Grüße
Dani
Ich habe mich an der ursprünglichen Batchdatei im Ausgangsposting und an dem zweiten Posting von Stylewalker orientirt.
Ich verstehe es dann so:
Die Batchdatei liegt im Verzeichnis "C:\Dokumente und Einstellungen\Admin\Desktop"
Auf "f:\daten\" existiert eine Kopie der Daten ab \Desktop\.
Es wird eine Liste aller Dateien und Verzeichnisse erstellt (list.txt).
Danach wird jede einzelne Datei und jedes Verzeichnis verglichen ob sie auf "f:\daten\" existieren. Existieren sie dort schon erden sie auf "C:\Dokumente und Einstellungen\Admin\Desktop" gelöscht.
So interpretiere ich das ganze zumindest.
Und daher braucht man auch das weglassen der ersten drei token.
Die Alternative wäre den Teil "C:\Dokumente und Einstellungen\Admin\" der ausgelesenen Pfade durch "f:\daten\" zu ersetzen, was auf das gleiche hinauslaufen würde.
Besser wäre dann denke ich allerdings die Verwendung von xcopy /d /L "%~dp" "f:\daten\" statt dem dir Befehl um auch gleiche Datenstände zu überprüfen und nicht nur Dateinamen.
Ich verstehe es dann so:
Die Batchdatei liegt im Verzeichnis "C:\Dokumente und Einstellungen\Admin\Desktop"
Auf "f:\daten\" existiert eine Kopie der Daten ab \Desktop\.
Es wird eine Liste aller Dateien und Verzeichnisse erstellt (list.txt).
Danach wird jede einzelne Datei und jedes Verzeichnis verglichen ob sie auf "f:\daten\" existieren. Existieren sie dort schon erden sie auf "C:\Dokumente und Einstellungen\Admin\Desktop" gelöscht.
So interpretiere ich das ganze zumindest.
Und daher braucht man auch das weglassen der ersten drei token.
Die Alternative wäre den Teil "C:\Dokumente und Einstellungen\Admin\" der ausgelesenen Pfade durch "f:\daten\" zu ersetzen, was auf das gleiche hinauslaufen würde.
Besser wäre dann denke ich allerdings die Verwendung von xcopy /d /L "%~dp" "f:\daten\" statt dem dir Befehl um auch gleiche Datenstände zu überprüfen und nicht nur Dateinamen.