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

Frage Entwicklung Batch & Shell

Mitglied: bioperiodik

bioperiodik (Level 1) - Jetzt verbinden

06.05.2011 um 08:13 Uhr, 10550 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 duplikate löschen
gelöst Frage von M4xx-oneBatch & Shell5 Kommentare

Hallo Gemeinde ich hab ein problem ich möchte mittels batchdatei eine TXT datei aufräumen die datei hat folgende eintäge ...

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 :) ...

Neue Wissensbeiträge
MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 11 StundenMikroTik RouterOS4 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 11 StundenSicherheit

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Administrator.de Feedback

Entwicklertagebuch: Die Startseite wurde überarbeitet

Information von admtech vor 14 StundenAdministrator.de Feedback9 Kommentare

Hallo Administrator User, mit dem Release 5.7 haben wir unsere Startseite überarbeitet und die Beiträge und Fragen voneinander getrennt. ...

Vmware

VMware Desktopprodukte sind verwundbar

Information von Penny.Cilin vor 19 StundenVmware

Die VMware-Anwendungen zum Umgang mit virtuellen Maschinen Fusion, Horizon Client und Workstation sowie die Plattform NSX sind verwundbar. Davon ...

Heiß diskutierte Inhalte
Visual Studio
Vb.net-Tool zum Erzeugen einer Outlook-E-Mail
Frage von ahstaxVisual Studio24 Kommentare

Hallo, ich möchte gerne ein vb.net-Tool schreiben, das am Ende eine Outlook-E-Mail erzeugt. Grundsätzlich ist mir klar, wie das ...

Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server16 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows Netzwerk
Netzwerk Neustrukturierung
Frage von IT-DreamerWindows Netzwerk16 Kommentare

Hallo verehrte Community und Admins, bei uns im Haus steht eine Neustrukturierung an. Dafür benötige ich von euch ein ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...