Hallo!
Ich will auf wunsch Ergebnisse in einer Protokolldatei speichern, wie mach ich das am besten?
Programmieren - alles kontrollieren 4.937 Themen, 20.654 Beiträge
Hi!
Es wird in jedem fall kompliziert und erreicht IMHO die Grenzen mit DOS-Batch Machbaren.
Solche Aufgaben hab' ich dann eher in einem neuen Pascal-Programm umgesetzt. ;-)
OK. Zu den einzelnen Fragen/Details:
>for %%A IN (%2) Do echo %2 Damit gibt er den Datei Namen aus,
>der den Suchtext beinhaltet, weil er ja mehrere Dateien
>durchsuchen kann, die müssen ja nur durch eine Leertaste
>getrennt eingegeben werden, reicht dafür ein Platzhalter?
Nein, in %2 steht immer nur genau der zweite Parameter.
Allerdings gibt es den Befehl SHIFT. Der schiebt die Parameter um eine Stelle nach "Links": %2 wird zu %1, %3 wird zu %2 usw.
Wenn du nun die Protokolierung abhängig von einem Parameter umsetzen willst UND mehrere Filenamen durchsuchen willst, dann muss man die Syntax des neuen Batch streng festlegen (naja, ist auch nur ein Vorschlag):
batch suchstring param1 param2 datei1 datei2 (..dateix)
Und die Bearbeitung im Batch etwas flexibler gestallten. Dazu muss man IMHO mit einigen variablen zur Steuerung arbeiten.
Der Suchstring muss immer angegeben werden, also speicherst du ihn in einer Variable ab und eine Variable für die Protokolierung löschen wir erstmal:
@echo on
rem Damit man was sieht.. ;-)
set suchstring=%1
rem Voreinstellung: kein Protokoll und keine Zählen:
set proto=
set count=
Den Parameter /C und den neuen Protokoll Parameter /P wird zusammen ausgewertet, da man ja nicht wissen kann, ob sie angegeben wurden oder nicht. Sie werden in Variablen gespeichert:
:PLOOP
if "%2"=="/C" then goto USEC
if "%2"=="/c" then goto USEC
if "%2"=="/P" then goto USEP
if "%2"=="/p" then goto USEP
rem Kein Parameter gefunden, also ist %2 ein Dateiname!
:DLOOP
rem Wenn %2 leer ist, dann ist alles aus...
if "%2"=="" goto ENDE
rem Mit dem aktuellen Namen in %2 suchen:
find "%suchstring%" %2 /l %COUNT%
rem Aus den nächsten Namen setzen:
shift
goto DLOOP
rem Parameterbehandlung:
:USEC
set count=/C
shift
goto PLOOP
:USEP
set proto==JA!
shift
goto PLOOP
:ENDE
echo Das war's
Warum du nochmal mit FOR die gefunden Dateinamen ausgegeben willst, verstehe ich nicht (und das funktioniert auch nicht, da du ja nirgends abfragst, ob in %2 überhaupt etwas gefunden wurde (ich meine wie soll FOR wissen, das FIND was gefunden hat?).
SO, was jetzt noch fehlt ist die Protokolierung. Den Test, ob mein Batch überhaupt funktioniert, überlasse ich dir. ;-)
Naja, mit IF kann man auch abfragen, ob etwas nicht der Fall ist:
if not "%proto"=="" goto irgendwo
Ich glaube, damit sollte man dann weiter kommen, oder? ;-)
Bis denn
Andreas