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

Frage Entwicklung Batch & Shell

GELÖST

Batch Suche nach Dateiendungen in zusammenhang mit darauffolgende Aktionen

Mitglied: AngryWookiee

AngryWookiee (Level 1) - Jetzt verbinden

10.05.2011, aktualisiert 11:39 Uhr, 3804 Aufrufe, 13 Kommentare

Hallo zusammen

Ich habe ein grosses Problem bei einer Batch Datei. In mehreren Webverzeichnisen auf einem Server werden in ein Bilder Upload Ordner immer wieder .php Scripte hochgeladen welche dann ausgeführt werden. So ist es nun öfters schon vorgekommen das die netten Herren sich unbefugt zugriff beschaffen konnten. Ich wollte nun ein Script schreiben das soetwas verhindern kann. Ich bekomme jedoch immer eine Fehlermeldung bei einer ganz simplen FOR /F Schleife und sehe es total nicht ein wieso das nicht gehen soll ...

Ich Poste hier mal das Script das ich habe.
Ich möchte aus der Datei folders.txt die Pfade lesen der Verzeichnise. danach möcht eich einen Dir in das dir.log schreiben um darin nach Dateiendungen zu suchen. Wenn eine solche Datei existiert soll mir a auf 1 gesettet werden (Später für die Auswertung), ebenfalls soll das Script die betroffenen Dateien in die Quarantaine verschieben. Findet er nichts soll er einfach weiter das Script arbeiten. Am Schluss möchte ich prüfen ob a=1 ist um so ein Alarm (via anderm Tool) zu schlagen. da a jedoch für den nächsten durchlauf wieder auf 0 zurückgesetzt werden muss habe ich das so arangiert dass wenn a=1 ist das all=1 wird. somit kann ich a wieder verwenden und kann das all für die auswertung verwenden.

der Fehler kommt bei der Ausführung und besagt "(" ist syntaktisch an dieser Stelle nicht verarbeitbar. so wie ich es nachvollziehen kann ist dies bei der Zeile " FOR /F %%f IN (%folders%) DO ("

Was mache ich falsch ? Besten Dank für eure Zeit und Comments !

mfg

Batch:
01.
@echo on 
02.
REM Pfade 
03.
	set alert="C:\OSC_Antihack\alert.htm" 
04.
	set dirlog="C:\OSC_Antihack\dir.log" 
05.
	set quarantaine="C:\OSC_Antihack\Quarantaine" 
06.
	set folders=C:\OSC_Antihack\folders.txt 
07.
 
08.
REM Auslesen aus Datei; Schreiben von Dirlog 
09.
	FOR /F %%f IN (%folders%) DO ( 
10.
		dir %%f > %dirlog% 
11.
 
12.
		REM Suche nach Dateien 
13.
		find /c /i ".htm" %dirlog% 
14.
		if errorlevel 0 ( set a=1 
15.
				xcopy /C /Y %%f\*.htm %quarantaine%  
16.
				del %%f\*.htm" 
17.
18.
 
19.
		find /c /i ".html" %dirlog% 
20.
		if errorlevel 0 ( set a=1 
21.
				xcopy /C /Y %%f\*.html %quarantaine%  
22.
				del %%f\*.html" 
23.
24.
			 
25.
		find /c /i ".php" %dirlog% 
26.
		if errorlevel 0 ( set a=1 
27.
				xcopy /C /Y %%f\*.php %quarantaine%  
28.
				del %%f\*.php" 
29.
30.
			 
31.
		REM Auswerten von Zähleraufgabe und mögliches Setzen von Alarm 
32.
		if %a%==1 ( 
33.
			echo Fehler in %%f > %alertlog% 
34.
			set all=1 
35.
36.
		set a=0 
37.
38.
 
39.
	if %all%==1 ( 
40.
		echo NOK > %alert% 
41.
	)
[Edit Biber] Codeformatierung [/Edit]
Mitglied: Jochem
10.05.2011 um 11:57 Uhr
Moin,

rein bauchtechnisch vermute ich, daß der Ordner "folders.txt" vom "for-Befehl" nicht als Ordner erkannt wird, sondern als Datei. Nenn doch spaßeshalber den Ordner mal um in "folders" und starte die Abfrage neu.

Gruß J chem
Bitte warten ..
Mitglied: bastla
10.05.2011 um 11:59 Uhr
@Jochem
Eigentlich hätte ich "folders.txt" als eine Liste von Ordnern interpretiert ...

Grüße
bastla
Bitte warten ..
Mitglied: Friemler
10.05.2011 um 12:01 Uhr
Hallo AngryWookiee,

willkommen im Forum. Du machst da gleich mehrere Fehler:
  • Du veränderst die Variable a innerhalb der FOR-Schleife und fragst ebenfalls ihren Wert ab. Damit das funktioniert, muss die verzögerte Erweiterung von Variablen aktiviert und benutzt werden, d.h. statt %a% musst Du !a! schreiben.
  • In den Zeilen 16, 22 und 28 ist ein Anführungszeichen zu viel/zu wenig.

Tipps:

Gruß
Friemler
Bitte warten ..
Mitglied: Jochem
10.05.2011 um 12:05 Uhr
Moin,

Ok, überredet . Ich sagte ja "Bauchgefühl".

Gruß J chem
Bitte warten ..
Mitglied: bastla
10.05.2011 um 12:06 Uhr
Hallo AngryWookiee und willkommen im Forum!

Auf Anhieb kann ich zwar den angesprochenen Syntaxfehler nicht erkennen [Edit] (ich bin ja nicht Friemler oder wenigstens Chuck Norris ) [/Edit], aber was nicht funktionieren wird ist
  • die Abfrage "if errorlevel 0" - damit wird nämlich auf einen Errorlevel größer-gleich 0 geprüft
  • der Vergleich von %a% innerhalb der Schleife (Stichwort: "delayedExpansion")

Soferne es Ordnernamen mit enthaltenen Leer- oder Sonderzeichen geben sollte, wären auch [Edit] genügend [/Edit] Anführungszeichen gefragt ...

Alternativen:
01.
find /c /i ".htm" %dirlog% && ( 
02.
    set a=1 
03.
    move "%%f\*.htm" %quarantaine% 
04.
)
Mit "&&" verknüpfte Anweisungen werden nur ausgeführt, wenn der vorhergehende Befehl einen Errorlevel 0 geliefert hat (Gegenstück: "||").

Die Abfrage kannst Du etwa so realisieren:
01.
if defined a ( 
02.
    echo Fehler in %%f > %alertlog% 
03.
    set all=1 
04.
05.
set "a="
Ob eine Variable überhaupt existiert, kann auch innerhalb einer Schleife mit "if defined" festgestellt werden (wobei es egal ist, welchen Wert sie hat).

Grüße
bastla
Bitte warten ..
Mitglied: AngryWookiee
10.05.2011 um 12:07 Uhr
Hallo und dankeschön für die schnellen Antworten

Verstehe eure Lösungsansätze noch nicht ganz.

Folders.txt ist kein Ordner sondern eine Textdatei in dieser die Verzeichnisse stehen welche zu überprüfen sind.

@Jochem: Hast du da Datei und Ordner durcheinander gebracht oder verstehe ich dich da echt falsch ?

@bastla: Genau, in Folders.txt ist eine Liste von Ordnern enthalten.
Bitte warten ..
Mitglied: AngryWookiee
10.05.2011 um 12:10 Uhr
Okay nun sind alle schneller gewesen als ich

Danke viel mal für die vielen Infos. Ich werde dies versuchen noch heute so umzusetzen wie ihr mir das beschrieben habt. Spätestens morgen gebe ich euch dann das Feedback zurück.

Nochmals besten Dank an alle.
Bitte warten ..
Mitglied: Friemler
10.05.2011 um 12:16 Uhr
Moin bastla,

naja, um zu erkennen dass z.B. bei
del %%f\*.htm"
in Zeile 16 ein Anführungszeichen entweder zu viel oder zu wenig ist, muss man weder Chuck Norris noch ein Friemler sein...

[EDIT]
Fragt sich sowieso, ob Mr. Norris das erkannt hätte.
[/EDIT]

Gruß
Friemler
Bitte warten ..
Mitglied: AngryWookiee
13.05.2011 um 13:27 Uhr
Hallo zusammen

Ich habe nun das Script so angepasst wie ihr mir empfohlen habt. Nun scheint die Dateisuche sowie der Verschiebungsteil wunderbar zu funktionieren.
Das Problem welches ich nicht beheben konnte ist die Auswertung.

Die Dateien (sofern) gefunden werden korrekt wegkopiert. Nach dem verschieben wird jedoch kein alertlog sowie alert.htm geschrieben.
Ich habe versucht die variable a vor der auswertung mit einem echo zu überprüfen um so feststellen zu können ob der set befehl überhaupt funktioniert.
Er gab mir leider nichts ausser Echo ist ausgeschaltet aus. obwohl für die ausgabe echo angegeben wurde.

Ich poste nochmals das script. Irgendwo in der auswertung, verzögerte Erweiterung von Variablen, oder im Set befehl selbst übersehe ich was.

mfg.

01.
@echo off & setlocal enabledelayedexpansion 
02.
 
03.
REM Pfade 
04.
	set alert="C:\OSC_Antihack\alert.htm" 
05.
	set dirlog="C:\OSC_Antihack\dir.log" 
06.
	set quarantaine="C:\OSC_Antihack\Quarantaine" 
07.
	set folders=C:\OSC_Antihack\folders.txt 
08.
	set alertlog="C:\OSC_Antihack\alert.log" 
09.
 
10.
	REM Auslesen aus Datei; Schreiben von Dirlog 
11.
	FOR /F %%f IN (%folders%) DO ( 
12.
	 
13.
		dir %%f > %dirlog% 
14.
 
15.
		REM Suche nach Dateien 
16.
		find /c /i ".htm" %dirlog% && (  
17.
			set !a!=1  
18.
				xcopy /C /Y %%f\*.htm %quarantaine%  
19.
				del %%f\*.htm 
20.
21.
		 
22.
		find /c /i ".html" %dirlog% && (  
23.
			set !a!=1  
24.
				xcopy /C /Y %%f\*.html %quarantaine%  
25.
				del %%f\*.html 
26.
27.
			 
28.
		find /c /i ".php" %dirlog% && (  
29.
			set !a!=1  
30.
				xcopy /C /Y %%f\*.php %quarantaine%  
31.
				del %%f\*.php 
32.
33.
 
34.
		REM Auswerten von Zähleraufgabe und mögliches Setzen von Alarm 
35.
		if defined a (  
36.
			echo Fehler in %%f > %alertlog%  
37.
			echo NOK > %alert%  
38.
		)  
39.
		set a=0 
40.
41.
	
Bitte warten ..
Mitglied: Friemler
13.05.2011 um 13:37 Uhr
Hallo AngryWookie,

Du schreibst
set !a!=1
Die Kennzeichnung von Variablen durch % oder (bei verzögerter Variablenerweiterung) durch ! ist nur auf der rechten Seite einer Zuweisung/bei Verwendung ihres Wertes nötig. Die Ausrufezeichen weglassen, dann sollte es funktionieren.

Was Du hier machst ist eine Variable mit dem Namen !a! definieren.

Gruß
Friemler
Bitte warten ..
Mitglied: AngryWookiee
13.05.2011 um 13:42 Uhr
Hallo Friemler

Besten dank für den Hint!
Ich habe es gleich mal ausprobiert. nun wird mir das alert.htm und das alert.log auch geschrieben wenn keine datei weg zukopieren ist.
Sprich a ist für ihn immer deffiniert darum schreibt er in der Prüfung ab Zeile 34. die Dateien.
Liegt das am Setbefehl ?

Habe den untersten set bereits nach set "a=" angepasst so das kein Wert darin steht. anscheinend ist a dann immernoch als was definiert

mfg. AngryWookiee
Bitte warten ..
Mitglied: Friemler
13.05.2011 um 13:52 Uhr
Hallo AngryWoockiee,

stimmt das
set "a="
hatte ich doch glatt vergessen.

Falls Du das Script aus einem Konsolenfenster startest, gib mal
set a
ein. Das zeigt alle Umgebungsvariablen an, die mit a anfangen. Evtl. hast Du im Environment aus irgendwelchen Gründen (vorheriger Scriptlauf mit auskommentierter Zeile 1) bereits eine Variable a.

Gruß
Friemler
Bitte warten ..
Mitglied: AngryWookiee
13.05.2011 um 13:58 Uhr
Yeeha !!!!

Besten Dank Herr Friemler !!

Ich hatte tatsächlich a=0 gesettet.

Habe nun ein neues Shellfenster geöffnet. Nun Funktioniert das Script einwandfrei !

Besten Dank an alle Helfer!!!

mfg. AngryWookiee
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Suche nach Dateien mit doppelter Dateiendung
Frage von KangaroojackBatch & Shell18 Kommentare

Hallo Leute, evtl. eine triviale Aufgabe, aber ich bekomme es nicht hin. Ziel ist es von diesen blöden Verschlüsselungsviren ...

Batch & Shell
Dateiendung über Batch entfernen.
gelöst Frage von joe65Batch & Shell3 Kommentare

Hallo, ich habe eine Menge Dateien folgenden Aussehens: Dateiname.cmd.txt Ich würde gern mit einen Batch-Script die Erweiterung "txt" entfernen, ...

Batch & Shell
Batch mit forfiles - Dateiendung filtern - Dateien löschen
Frage von mschaedler1982Batch & Shell2 Kommentare

Hallo zusammen, ich habe hier eine Batch Datei geschrieben, die an sich funktioniert. (Wenn man den Code zeilenweise kopiert ...

Windows Server
Dateiendungen verbieten
gelöst Frage von MahagonWindows Server10 Kommentare

Moin, ich möchte aufgrund dessen, dass in der Branche in der ich arbeite viele Kunden mit einem Cryptovirus befallen ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Batch & Shell
Meltdown Microsoft Prüf Script - .zip Datei leider leer
gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...

Batch & Shell
Shell-Skript - Syntax error: Unterminated quoted string
Frage von newit1Batch & Shell13 Kommentare

Hallo Ich schreibe ein Skript das eine CSV-Datei in eine mySQL Datenbank schieben soll. Bekomme nach start des Skrips ...

E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Entwicklung
VBS: alle PDF-Dateien in einem Ordner gleichzeitig öffnen
gelöst Frage von JuweeeEntwicklung9 Kommentare

Hallo, ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt). Die Berichtsformulare sind im Layout alle ...