Also, folgendes Problem:
Es sind mehrere gleiche Dateien vorhanden, die sich nur im Namen (und Ordner wo sie drin sind) unterscheiden. Diese sollen gefunden werden (es sind ja auch noch andere Dateien da) und bis auf ein Exemplar in einem ausgewähltem Ordner gelöscht werden.
Die identifizierung funktioniert ja mit fc oder comp, nur dass diese dann auch gelöscht werden hab ich noch nicht hinbekommen.
Das kann auch mit zusätzlichen Kommandozeilen-Tools erfolgen, wichtig ist nur, dass es sich per Batch straten lässt und dass man in der Batch über Parameter bestimmen kann, was gelöscht werden soll.
Seite 1 von 1
Gleiche Dateien Per Batch Finden Und Löschen
Anzeige
#2
geschrieben 27. März 2006 - 16:19
Also ich habe mir das selbst Abhilfe verschafft. Ein modifiziertes SHA1SUM ohne Filename-Tail, 'cat' und Alternate Data Streams.
a - add
r - remove
u - update
c - check
e - export
d - duplicate removal
Wie du siehst werden sämtliche Löschaufträge in eine neue Batch geschrieben, die normalerweise automatisch ausgeführt wird. Kann man aber auch noch vorher manuell begutachten.
Was fehlt ist eine Übersicht, zu welcher Datei eine Datei jeweils ein Duplikat ist und welches der Duplikate man löschen möchte. Der Einfachheit halber wird einfach alles direkt durchsucht und nur das Auftreten eines Duplikats vermerkt.
Der Vorteil bei den Prüfsumme ist, daß du dir unnötige Vergleiche ersparst.
@echo off :again if "%~1"=="-c" ( for /r %%d in (*.*) do ( cat <"%%~d":SHA1 >%TEMP%\tmp if exist %TEMP%\tmp ( set sum1=0 set sum1=1 for /f "delims=" %%j in (%TEMP%\tmp) do set sum1=%%j sha1 "%%~d" >%TEMP%\tmp for /f "delims=" %%j in (%TEMP%\tmp) do set sum2=%%j del /f %TEMP%\tmp if NOT "%sum1%"=="%sum2%" echo BAD: "%%~d" ) else ( echo MISSING: "%%~d" ) ) ) if "%1"=="-a" ( for /r %%d in (*.*) do ( cat <"%%~d":SHA1 >%TEMP%\tmp if exist %TEMP%\tmp ( del /f %TEMP%\tmp ) else ( sha1 "%%~d">"%%~d":SHA1 ) ) ) if "%~1"=="-u" ( for /r %%d in (*.*) do ( cat <"%%~d":SHA1 >%TEMP%\tmp if exist %TEMP%\tmp ( del /f %TEMP%\tmp sha1 "%%~d">"%%~d":SHA1 ) ) ) if "%~1"=="-r" ( for /r %%d in (*.*) do ( cat <"D:\home\All Users\bin\scripts\empty" >"%%~d":SHA1 ) ) if "%~1"=="-d" ( for /r %%d in (*.*) do ( cat <"%%~d":SHA1 >%TEMP%\tmp if exist %TEMP%\tmp ( for /f "delims=" %%i in (%TEMP%\tmp) do ( if exist %TEMP%\%%i.sha1 ( echo del /f "%%~d" >>%TEMP%\del.cmd ) else ( echo.>%TEMP%\%%i.sha1 ) ) rem del /f %TEMP%\tmp ) ) if exist %TEMP%\del.cmd ( call %TEMP%\del.cmd del /f %TEMP%\del.cmd ) del /f %TEMP%\*.sha1 ) if "%~1"=="-e" ( for /r %%d in (*.*) do ( cat <"%%~d":SHA1 >%TEMP%\tmp if exist %TEMP%\tmp ( for /f "delims=" %%i in (%TEMP%\tmp) do echo %%i "%%~d">>%TEMP%\sha1sum.txt del /f %TEMP%\tmp ) ) if exist %TEMP%\sha1sum.txt move %TEMP%\sha1sum.txt . ) shift if NOT "%1"=="" goto :again @echo off
a - add
r - remove
u - update
c - check
e - export
d - duplicate removal
Wie du siehst werden sämtliche Löschaufträge in eine neue Batch geschrieben, die normalerweise automatisch ausgeführt wird. Kann man aber auch noch vorher manuell begutachten.
Was fehlt ist eine Übersicht, zu welcher Datei eine Datei jeweils ein Duplikat ist und welches der Duplikate man löschen möchte. Der Einfachheit halber wird einfach alles direkt durchsucht und nur das Auftreten eines Duplikats vermerkt.
Der Vorteil bei den Prüfsumme ist, daß du dir unnötige Vergleiche ersparst.
Dieser Beitrag wurde von Rika bearbeitet: 27. März 2006 - 16:20
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
#3
geschrieben 28. März 2006 - 15:03
Ich glaube, ich brauch da etwas Hilfe...
Ich bekomme immer die folgende Fehlermeldung:
rem del /f C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\tmp ) ) Das System kann den angegebenen Pfad nicht finden.
Ich habe mir für das Ganze SHA1 von hier heruntergeladen. Ist es das richtige, oder brauch ich da ein spezielles?
Also die Batch findet alle Dateien und führt sich für alle auch aus nur kann es eben da was nicht finden...
EDIT: Problem gelöst, die Idee mit Prüfsummen hab ich einfach so eingebaut, dass ich genau bestimmen kann, welche Dateien gelöscht weden .
Dieser Beitrag wurde von Link bearbeitet: 30. März 2006 - 09:41
#4
geschrieben 31. März 2006 - 11:32
Hab noch ne kleine Frage, will jetzt dafür nicht einen extra Thread aufmachen.
Was ist an dieser Zeile falsch?
Wenn die Datei vorhanden ist, funktioniert es, wenn nicht -> Syntaxfehler. Hab auch schon andersrum probiert, da funktioniert eindeutig der GOTO-Befehl nicht zusammen mit der IF-Bedingung, auch mit Klammern drum nicht, aber wieso?
Wenn ich das gleiche GOTO einfach so an den Anfang der Batch schreibe, funktioniert der.
Was ist an dieser Zeile falsch?
if exist *.* (ren *.* %1-09.*) else goto ende
Wenn die Datei vorhanden ist, funktioniert es, wenn nicht -> Syntaxfehler. Hab auch schon andersrum probiert, da funktioniert eindeutig der GOTO-Befehl nicht zusammen mit der IF-Bedingung, auch mit Klammern drum nicht, aber wieso?
Wenn ich das gleiche GOTO einfach so an den Anfang der Batch schreibe, funktioniert der.
#5
geschrieben 31. März 2006 - 13:55
Zitat
Ich bekomme immer die folgende Fehlermeldung
Jupp, ersetze mal alle %TEMP% durch "%TEMP%~1". Es ist aber problematisch, weil die Datei-Expansion nicht immer ordentlich funktioniert. Besser ist es, nur Pfade zu verwenden, die keine Leerzeichen enthalten.
Zitat
Ich habe mir für das Ganze SHA1 von hier heruntergeladen. Ist es das richtige, oder brauch ich da ein spezielles?
Wie schon benannt: modifiziert. SHA1SUM spuckt normalerweise SHA1-Hash, zwei Leerzeichen und den kompletten Dateinamen inklusive Pfad aus. Durch schnelles Rumfummeln im Quelltext und Neukompilieren spruckt es nur noch den Hash aus.
Klar, man kann es auch mit den Mitteln einer Batch entsprechend nachbearbeiten, aber das ist unnötig aufwendig, fehleranfällig und ineffizient.
Zitat
if exist *.* (ren *.* %1-09.*) else goto ende
*.* ist keine Datei, sondern bestenfalls ein Satz von Dateien. Außerdem muss der else-Bereich ebenfalls geklammert werden.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
#6
geschrieben 31. März 2006 - 14:29
Das Problem mit der Fehlermeldung ist, wie in meinem Edit geschrieben, erledigt, ich hab das mit den Prüfsummen auf eine etwas andere Art eingebaut. An dem "schnellem Rumfummeln im Quelltext und Neukompilieren" wäre ich sowieso gescheitert.
Heißt das, es funktioniert so nicht? Ich will einfach dass er falls überhaupt eine Datei vorhanden ich, diese umbenennt und falls keine Datei vorhanden ist, soll er zum Ende gehen.
EDIT: mit Klammern funktioniert es auch nicht .
Zitat (Rika: 31.03.2006, 14:55)
*.* ist keine Datei, sondern bestenfalls ein Satz von Dateien. Außerdem muss der else-Bereich ebenfalls geklammert werden.
Heißt das, es funktioniert so nicht? Ich will einfach dass er falls überhaupt eine Datei vorhanden ich, diese umbenennt und falls keine Datei vorhanden ist, soll er zum Ende gehen.
EDIT: mit Klammern funktioniert es auch nicht .
Dieser Beitrag wurde von Link bearbeitet: 31. März 2006 - 14:31
#7
geschrieben 31. März 2006 - 15:08
set foo=bar
for /r %%i in (*.*) do set foo=blah
if NOT "%foo%"=="bar" (...)
Wenn du den kompletten Teil hinter dem IF-Zweig mit in die Klammern nimmst, dann kannst du dir auch noch das GOTO ersparen.
for /r %%i in (*.*) do set foo=blah
if NOT "%foo%"=="bar" (...)
Wenn du den kompletten Teil hinter dem IF-Zweig mit in die Klammern nimmst, dann kannst du dir auch noch das GOTO ersparen.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
Thema verteilen:
Seite 1 von 1