Kompliziertes Dateien löschen oder wie krieg ich dir s b mit relativen Pfaden?
Hallo zusammen,
hab mich grad hier registriet weil ich heute seit 3 stunden schon mit den dos FOR befehlen rumkämpfe. ich schaff in nem kleinen unternehmen als software entwickler.
ich muss eine batchdatei schreiben mit der ich alle dateien die auf sagen wir mal X: nicht mehr existieren auf Y: auch lösche.
erstellt also bitte mal ne .bat datei (nennen wir sie mal create.bat und kopiert folgenden inhalt hinein
md folder1
md folder2
cd folder1
echo That is the content of the File 1 >File1.txt
echo That is the content of the File 2 >File2.txt
echo That is the content of the File 3 >File3.txt
echo That is the content of the File 4 >File4.txt
md subfolder1
cd subfolder1
echo That is the content of the SubFile 1 >SubFile1.txt
echo That is the content of the SubFile 2 >SubFile2.txt
echo That is the content of the SubFile 3 >SubFile3.txt
cd..
cd..
cd folder2
copy ..\folder1 >nul
del file2.txt
md subfolder1
cd subfolder1
copy ..\..\folder1\subfolder1
del SubFile2.txt
cd..
cd ..
dann eine batch datei nennen wir sie mal mydel.bat mit folgendem inhalt
@echo off
echo Quelle: %1
echo Ziel: %2
for /f "tokens=*" %%i in ('dir /b %2') do if not exist "%1\%%i" echo Loesche Datei
%%i im ZielOrdner
ok geht zur kommandozeile und startet die create.bat
es werden zwei verzeichniss strukturen erstellt.
in folder2 werden ein paar dateien gelöscht
nun will ich das ich die dateien, die in folder2 fehlen, aus folder1 auch lösche
dazu erfolgt der aufruf mydel folder2 folder1
wie ihr sehen könnt WÜRDE die datei file2.txt welche ja im folder2 mittlerweile fehlt korrekterweise im folder1 nun auch gelöscht werden.
mein problem sind aber die SUBDIRS!!!!
mache ich dir /S/B
dann hab ich einen absoluten pfad. ich benötige aber einen relativen pfad!!
hab heute alles versucht mit sämtlichen for /F und for /R
for /R funktioniert auch gut, auch mit subdirs aber liefert mir ebenso absolute pfade zurück!
hab auch die ganzen syntaxe wie ~n ... angeschaut nichts half.
wer kann mir die mydel.bat so schreiben das wirklich das was in folder2 fehlt auch in folder1 gelöscht wird? sowas einfaches sollte doch per batch möglich sein!!
hab mich grad hier registriet weil ich heute seit 3 stunden schon mit den dos FOR befehlen rumkämpfe. ich schaff in nem kleinen unternehmen als software entwickler.
ich muss eine batchdatei schreiben mit der ich alle dateien die auf sagen wir mal X: nicht mehr existieren auf Y: auch lösche.
erstellt also bitte mal ne .bat datei (nennen wir sie mal create.bat und kopiert folgenden inhalt hinein
md folder1
md folder2
cd folder1
echo That is the content of the File 1 >File1.txt
echo That is the content of the File 2 >File2.txt
echo That is the content of the File 3 >File3.txt
echo That is the content of the File 4 >File4.txt
md subfolder1
cd subfolder1
echo That is the content of the SubFile 1 >SubFile1.txt
echo That is the content of the SubFile 2 >SubFile2.txt
echo That is the content of the SubFile 3 >SubFile3.txt
cd..
cd..
cd folder2
copy ..\folder1 >nul
del file2.txt
md subfolder1
cd subfolder1
copy ..\..\folder1\subfolder1
del SubFile2.txt
cd..
cd ..
dann eine batch datei nennen wir sie mal mydel.bat mit folgendem inhalt
@echo off
echo Quelle: %1
echo Ziel: %2
for /f "tokens=*" %%i in ('dir /b %2') do if not exist "%1\%%i" echo Loesche Datei
%%i im ZielOrdner
ok geht zur kommandozeile und startet die create.bat
es werden zwei verzeichniss strukturen erstellt.
in folder2 werden ein paar dateien gelöscht
nun will ich das ich die dateien, die in folder2 fehlen, aus folder1 auch lösche
dazu erfolgt der aufruf mydel folder2 folder1
wie ihr sehen könnt WÜRDE die datei file2.txt welche ja im folder2 mittlerweile fehlt korrekterweise im folder1 nun auch gelöscht werden.
mein problem sind aber die SUBDIRS!!!!
mache ich dir /S/B
dann hab ich einen absoluten pfad. ich benötige aber einen relativen pfad!!
hab heute alles versucht mit sämtlichen for /F und for /R
for /R funktioniert auch gut, auch mit subdirs aber liefert mir ebenso absolute pfade zurück!
hab auch die ganzen syntaxe wie ~n ... angeschaut nichts half.
wer kann mir die mydel.bat so schreiben das wirklich das was in folder2 fehlt auch in folder1 gelöscht wird? sowas einfaches sollte doch per batch möglich sein!!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 69120
Url: https://administrator.de/contentid/69120
Ausgedruckt am: 17.11.2024 um 18:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo Ruflet und willkommen im Forum!
Vorweg gleich einmal ein Kompliment: Vernünftige Testdaten bekomme ich hier (zumindest ohne Nachfrage) selten zu sehen, und schon gar nicht in der von Dir gewählten Form.
Du hast das Problem ja schon richtig formuliert: Was Du benötigst, ist ein relativer Pfad (und als Voraussetzung dafür ein vollständiger absoluter Pfad).
Um ersteren zu erhalten, kannst Du die "Ersetzen"-Funktionalität des "set"-Befehles verwenden, für letzteren genügt "%~f1".
Da der zu ersetzende Teil (aus dem übergebenen Parameter entnommen) variabel ist, wird zusätzlich "delayed expansion" benötigt (damit kann für die eine Variable das "%" durch ein "!" ersetzt werden). Dazu gleich ein Hinweis auf einen daraus resultierenden Nachteil: Datei- oder Pfadnamen mit einem "!" im Namen fallen durch den Rost und werden nicht verarbeitet - um auch solche berücksichtigen zu können, wäre eher eine VBS-Variante gefragt.
Grüße
bastla
Vorweg gleich einmal ein Kompliment: Vernünftige Testdaten bekomme ich hier (zumindest ohne Nachfrage) selten zu sehen, und schon gar nicht in der von Dir gewählten Form.
Du hast das Problem ja schon richtig formuliert: Was Du benötigst, ist ein relativer Pfad (und als Voraussetzung dafür ein vollständiger absoluter Pfad).
Um ersteren zu erhalten, kannst Du die "Ersetzen"-Funktionalität des "set"-Befehles verwenden, für letzteren genügt "%~f1".
Da der zu ersetzende Teil (aus dem übergebenen Parameter entnommen) variabel ist, wird zusätzlich "delayed expansion" benötigt (damit kann für die eine Variable das "%" durch ein "!" ersetzt werden). Dazu gleich ein Hinweis auf einen daraus resultierenden Nachteil: Datei- oder Pfadnamen mit einem "!" im Namen fallen durch den Rost und werden nicht verarbeitet - um auch solche berücksichtigen zu können, wäre eher eine VBS-Variante gefragt.
@echo off & setlocal enabledelayedexpansion
set "Quelle=%~f1"
echo Quelle: %Quelle%
set "Ziel=%~f2"
echo Ziel: %Ziel%
for /f "delims=" %%i in ('dir /b /s /a-d "%Ziel%"') do call :ProcessFile "%%i"
goto :eof
:ProcessFile
set "RelPath=%~1"
set "RelPath=!RelPath:%Ziel%=!
if not exist "%Quelle%\%RelPath%" echo Loesche Datei %1
Grüße
bastla