Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Jede zweite Datei löschen via Batch

Mitglied: bioperiodik

bioperiodik (Level 1) - Jetzt verbinden

06.05.2011 um 08:13 Uhr, 10839 Aufrufe, 9 Kommentare

Hallo,

Hab ein kleines Problem, aber leider noch keine passende Lösung gefunden:

Wir haben vom Abriss und Neubau eines Gebäude mit einer Webcam jede Minute ein Bild gemacht.
Aus diesen Bildern (ca 900 000 Stück) will ich jetzt einen kleinen Film machen.

Um die Bilder die Nachts gemacht worden sind zu filtern, hab ich schon eine Möglichkeit.

Allerdings sind dann immer noch viel zu viele Bilder übrig.

Jetzt fehlt noch eine Möglichkeit einfach Bilder zu löschen.

Hab gedacht eine Batch die jedes zweite (oder noch besser jedes n-te) Bild in einen neuen Ordner kopiert wäre super.
Allerdings kenn ich mich damit nicht wirklich aus.

Wäre super wenn mir jemand helfen könnte!

Danke schonmal im Vorraus
Gruß Seb
Mitglied: Biber
06.05.2011 um 09:38 Uhr
Moin bioperiodik,

wenn es doch eine einmalige Aktion ist, dann würde ich die Klamotte eben über den CMD-Prompt abfackeln und mir nicht extra dafür einen teuren Editor zum Batchdatei-Schreiben bestellen.

Wenn du mit dir ausdiskutiert hast, ob du nun jede zweite (oder n-te) Datei löschen oder kopieren willst, dann hangele dich an folgendem Ansatz weiter:

Vorüberlegung :
Jede zweite Datei würde heissen, wenn ich die Dateien "durchzähle", würde jede gerade (=ohne Rest durch durch 2 teilbare) laufende Nummer zu den Guten, jede ungerade ( Zahl modulo 2 ungleich 0) zu den Bösen gehören.
Jede n-te Datei würde heissen, wenn ich die Dateien "durchzähle", würde jede ohne Rest durch durch n teilbare) laufende Nummer zu den Guten, jede "Zahl modulo n ungleich 0" zu den Bösen gehören.

Dann zähl ich doch durch und nehme Modulo.
Proof of concept am CMD-Prompt (gesetzte DelayedExpansion ist Bedingung, aber bei mir per Default gesetzt]
>for /f "delims=: tokens=1,2" %i in ('dir *.txt /a-D /o-d /b^|findstr /n $') do @(set /a "x=%i % 2")>nul & @echo !x! [%i][%j] 
1 [1][such.txt] 
0 [2][prefs.txt] 
1 [3][test4findstr.txt] 
0 [4][temp2345.txt] 
1 [5][alleDwgs.txt] 
0 [6][exceldat.txt] 
1 [7][Dokument4.txt] 
0 [8][getNTLog.txt] 
1 [9][neroerr.txt] 
0 [10][logfile.txt] 
1 [11][werte.txt] 
0 [12][RevInfo.txt] 
1 [13][findstrhelp.txt] 
0 [14][MessSub.txt] 
1 [15][set_of_000.txt] 
0 [16][rsmoutput.txt] 
1 [17][ipconfig.txt]
Was ich hier mache ist:
for /f "delims=: tokens=1*" %i in ('dir *.txt /a-D /o-d /b^|findstr /n $') do @(set /a "x=%i % 2")>nul & @echo !x! [%i][%j]
In der FOR/F-Innenklammer:dir *.txt /a-D /o-d /b^|findstr /n $ => Liste alle Dateien *.txt auf und nummeriere die mit FindStr durch. Kannst du separat antesten.
Die FOR/F-Anweisung nimmt davon mit for /f "delims=: tokens=1*" die "Teile/Tokens" 1 und Rest, wenn das Ganze an jedem ":" getrennt wird.
Aus der "laufenden nummer", die in Laufvariable %i steht, errechne ich in Statischer Variable X den Modulo-Wert mit (set /a "x=%i % 2")>nul
Das "verzögert/delayed" aufgelöste Ergebnis, den Genau-Jetzt-Wert von %x%, also !x! zeige ich an, siehe Ausgabe.

Wenn ich dann löschen (oder kopieren) will:
>for /f "delims=: tokens=1*" %i in ('dir *.txt /a-D /o-d /b^|findstr /n $') do @(set /a "x=%i % 2")>nul & @if !x!==1 echo !x! del "%j" 
1 del "such.txt" 
1 del "test4findstr.txt" 
1 del "alleDwgs.txt" 
1 del "Dokument4.txt" 
1 del "neroerr.txt" 
1 del "werte.txt" 
1 del "findstrhelp.txt" 
1 del "set_of_000.txt" 
1 del "ipconfig.txt"
[ die Ausgabe von !x! ist nur proof-of-concept.]

Grüße
Biber
Bitte warten ..
Mitglied: Skyemugen
06.05.2011 um 09:58 Uhr
Aloha Biber,

kannst du mir eben mal auf die Sprünge helfen, ich bin mir nicht ganz im Klaren, wann man sinnvollerweise findstr /n $ und wann findstr /n "^" einsetzt, wovon mache ich das abhängig? In dem Beispiel hier dürfte ja beides funktionieren aber dem ist ja nicht immer so, allerdings bin ich nie dahintergestiegen

greetz André

P.S.: Hm und ich wollte erst eine temporäre txt schreiben lassen, war mir nicht bewusst, dass findstr /n $ auch einfach bei dir funktioniert *pfeif* still learning, long way to go
Bitte warten ..
Mitglied: Biber
06.05.2011 um 10:16 Uhr
Moin Skyemugen,

eigentlich hat jede Plaintext-Dateizeile einen Zeilenanfang (im Findstr-Slang "^") und ein Zeilenende CRLF ($).
Im wahren Leben hat aber oft die letzte Zeile keinen Zeilenumbruch (was kein Schwein sieht ausser wenn es "FindStr $" heisst).

Bei der DIR-Ausgabe gehe ich davon aus, dass sich die letzte ausgegebene Zeile nicht von der 3ten oder 17ten unterscheidet -
alle Zeilen sind gleich und alle Zeilen haben auch ein CRLF == $ am Ende.

Aus Sicherheitserwägungen würde ich sonst -auch wieder eigentlich - immer eine Prüfung auf "Zeilenanfang" == "^" empfehlen.

Ausser eben wenn die Faulheit stärker ist als Sicherheitsdenken.

Grüße
Biber
Bitte warten ..
Mitglied: bioperiodik
06.05.2011 um 10:19 Uhr
Hi Biber,

Danke für die schnelle Antwort, hab allerdings ein Problem:

Wenn ich die Zeile

for /f "delims=: tokens=1*" %i in ('dir *.jpg /a-D /o-d /b^|findstr /n $') do @(set /a "x=%i % 2")>nul & @if !x!==1 echo !x! del "%j"

in der cmd ausführe, werden einfach alle Dateien angezeigt, also es wird nichts gefiltert.

Was mach ich falsch? Steh grad voll aufm Schlauch!
Bitte warten ..
Mitglied: 60730
06.05.2011 um 10:22 Uhr
moin,

@ Biber - so früh schon so genial - Ihr habt guten Kaffee

@ bioperiodik:

Kann ich nicht nachvollziehen...

C:\!pix>dir *.jpg 
 Datenträger in Laufwerk C: ist .. 
 Volumeseriennummer: xxxxxxxxxxxxxx 
 
 Verzeichnis von C:\!pix 
 
12.02.2010  14:41         1.499.803 IMG_0019.jpg 
18.06.2010  16:15         1.494.721 IMG_0307.jpg 
18.06.2010  16:16         1.552.860 IMG_0308.jpg 
17.12.2009  16:50         1.539.607 js-mini.jpg 
17.12.2009  16:33            67.492 WP_HST_209.jpg 
               5 Datei(en)      6.154.483 Bytes 
               0 Verzeichnis(se), 36.006.580.224 Bytes frei 
 
C:\!pix>dir *.jpg /a-D /o-d 
 Datenträger in Laufwerk C: ist .. 
 Volumeseriennummer: xxxxxxxxxxxxxx 
 
 Verzeichnis von C:\!pix 
 
18.06.2010  16:16         1.552.860 IMG_0308.jpg 
18.06.2010  16:15         1.494.721 IMG_0307.jpg 
12.02.2010  14:41         1.499.803 IMG_0019.jpg 
17.12.2009  16:50         1.539.607 js-mini.jpg 
17.12.2009  16:33            67.492 WP_HST_209.jpg 
               5 Datei(en)      6.154.483 Bytes 
               0 Verzeichnis(se), 36.006.199.296 Bytes frei 
 
C:\!pix> 
 
C:\!pix>for /f "delims=: tokens=1*" %i in ('dir *.jpg /a-D /o-d /b^|findstr /n $ 
') do @(set /a "x=%i % 2")>nul & @if !x!==1 echo !x! del "%j" 
1 del "IMG_0308.jpg" 
1 del "IMG_0019.jpg" 
1 del "WP_HST_209.jpg" 
 
C:\!pix>
Bitte warten ..
Mitglied: bioperiodik
06.05.2011 um 10:32 Uhr
Hm...bei mir geht das nicht

Was hat das mit dem "gesetzte DelayedExpansion ist Bedingung, aber bei mit per Default gesetzt" auf sich?
Bitte warten ..
Mitglied: bastla
06.05.2011 um 10:35 Uhr
Hallo bioperiodik!

Starte die CMD-Shell mit
cmd /V:ON
- ansonsten kann auch in der Registry festgelegt werden (wie es bei Biber und offensichtlich auch T-Mo) der Fall ist, dass "delayedExpansion"aktiv ist.

Grüße
bastla
Bitte warten ..
Mitglied: bioperiodik
06.05.2011 um 10:44 Uhr
Hi,

Daran lags, vielen Dank für eure super schnelle und tolle Hilfe!

Gruß Sebastian
Bitte warten ..
Mitglied: Biber
06.05.2011 um 10:44 Uhr
Moin bioperiodik, moin alle anderen Frühaufsteher,

sorry für die unvollständige Kontextbeschreibung und danke @bastla für das schnelle Einspringen.

Wenn du am CMD-Prompt ein "Cmd /?" eingibst, dann sind zwei Zeilen dabei, in denen auf die REGkeys verwiesen wird.
Bei mir sind die in etwas so gesetzt
>cmd /?|findstr /i "delayed" 
   HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion 
   HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion 
 
>reg query "HKEY_CURRENT_USER\Software\Microsoft\Command Processor" 
 
! REG.EXE VERSION 3.0 
 
HKEY_CURRENT_USER\Software\Microsoft\Command Processor 
    CompletionChar      REG_DWORD       0x9 
    DefaultColor        REG_DWORD       0x74 
    EnableExtensions    REG_DWORD       0x1 
    PathCompletionChar  REG_DWORD       0x9 
    DisableUNCCheck     REG_DWORD       0x1 
    DelayedExpansion    REG_DWORD       0x1 
    Autorun     REG_SZ  D:\Biber\_1\cmdstartup.bat
--> der relevante Key dabei ist "DelayedExpansion"

Bastlas Alternavie ist genauso fein (also cmd /V:on).

Im Batch ist es alles erledigt (also auch ohne Regkeys oder /V:on) mit "Setlocal EnableDelayedExpansion"

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Batch Datei zum löschen des Papierkorbes

Frage von Munin92Batch & Shell3 Kommentare

Guten Abend liebe Community, ich hoffe das ich in diesem Forum für diese Frage richtig bin. Und zwar habe ...

Batch & Shell

Batch Datei um Windows Update zu löschen

Frage von lordofremixesBatch & Shell1 Kommentar

Hallo zusammen, wegen diesem Office Update welches ich per GPO deinstallieren lassen soll, werd ich noch verrückt. Ich hab ...

Batch & Shell

älteste dateien via batch löschen

gelöst Frage von cali169Batch & Shell6 Kommentare

hallo zusammen, ich habe nichts zu meinem problem gefunden, falls ich es überlesen habe bitte ich um milde :) ...

Batch & Shell

Batch: Dateien mit gleicher Größe löschen

Frage von gb2407Batch & Shell5 Kommentare

Hallo Ich will mittels einer Batch-Datei Dateien mit gleicher Größe löschen. Ich komm momentan nicht weiter und hoffe, dass ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 2 TagenWindows 105 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 2 TagenAdministrator.de Feedback18 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 3 TagenHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 3 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Router & Routing
Router auf Orginal Firmware zurück flashen mit Tftpd
Frage von ILeonardRouter & Routing21 Kommentare

Hallo, Ich habe zwei Router, einmal TP-Link 841n v11 und TP-Link 940N v5. Ich wollte fragen, ob jemand mir ...

Router & Routing
WRT keine Verbindung zum Web Interface
gelöst Frage von ILeonardRouter & Routing18 Kommentare

Hallo, Ich habe einen TP-Link WR841n mit wrt geflasht, das Problem ist ich kann mich mit 192.168.1.1 nicht verbinden. ...

Windows Server
Standortvernetzung zu einem Strato VServer (Windows)
Frage von matzefratze81Windows Server10 Kommentare

Moin, ich komme aus einem Enterprise-Umfeld und habe den Fehler gemacht, dass ich mich auf ein kleines Unternehmen eingelassen ...

TK-Netze & Geräte
Telefonie zweier Fritzboxen mit je eigenem DSL Anschluss verbinden
Frage von hannsgmaulwurfTK-Netze & Geräte10 Kommentare

Hallo zusammen, ich habe hier einen Haushalt mit zwei Anschlüssen. Einmal ISDN, einmal DSL. An jedem Anschluss hängt eine ...