Zum Inhalt springen

knifflige batch


baum

Empfohlene Beiträge

Hi,

ich hab eine knifflige frage an euch:

ich brauche ne batch die ein verzeichniss in eine datei listet. soweit kein problem aber, die batch soll die dateinamen die dann in der datei stehen mit einer for-schleife durchgehen, in jeden dieser ordner ist eine spezielle datei die immer gleich heißt, und in der jeder datei sind so zwischen 1 und 10 zeilen, und ich will aus jeder datei eine zeile rauslöschen in der ein bestimmtes wort steht, die anderen zeilen sollen aber erhalten bleiben.

jemand ne idee?

Link zu diesem Kommentar
Auf anderen Seiten teilen

naja ich hab mir das so vorgestellt das die erste schleiffe die ordnernamen aus der datei holt und dann in die zweite schleiffe springt, die jede zeile in der datei durchgeht und immer nen >> in eine neue datei macht auser wenn das bestimmte wort kommt, und hinterher die alte file löschen und die neue umbennenen.

Mein problem is nur das ich bei den schleiffen nicht so durchsteige

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eine Batchdatei kann eine Datei nicht Zeilenweise auslesen.

Der Befehl find sagt Dir nur ob das Wort in der Datei steht oder nicht. Wenn ja gibt find den Suchstring zurück sonst nichts.

Für solche Operationen sind Batchdateien nicht ausgelegt.

Was hälst Du von Windows Scripting Host. Ich weiss damit kann man viel Mist machen aber für dein Vorhaben genau das richtige.

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Schleifen:

Beispiel für eine Schleife:

------------------------------

FOR %%A IN (*.*) DO ECHO %%A

------------------------------

Hier wird die Schleife solange durchlaufen, wie es Dateien in einem Verzeichnis ("*.*" kann z.B.

für "datei.txt" oder was auch immer stehen) gibt.

Beim Durchlaufen wird der Name der Dateien ( gespeichert in"%%A") am Bildschirm ausgegeben.

------------------------------

@ECHO OFF

ECHO Diese Datei enthält die Namen der sich im Verzeichnis befindenden Dateien.> Names.txt

ECHO ====================>> Names.txt

FOR %%A IN (*.*) DO ECHO %%A >>Names.txt

ECHO ====================>> Names.txt

------------------------------

Diese Batch-Datei erzeugt eine Datei namens "Names.txt" mit dem o. genannten Text. Wenn zwei

">" hintereinander folgen, heißt das, dass ein Text an eine Datei angefügt werden soll, wenn nur

ein ">" dort stehen würde, würde die Datei jedesmal überschrieben werden.

Bei der Schleife passiert folgendes:

In einer Variable %%A wird der Name einer Datei, oder der ersten Datei in einem Verzeichnis,

gespeichert, der Name der Datei wird mittels ECHO-Befehl an die Datei Names.txt angehängt. Dies

wird solange wiederholt, bis es keine Dateien mehr im Verzeichnis gibt.

hier steht mehr

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, das ist die lösung.... hab mein Hirn angestrenkt. :marine :marine

trotzdem danke an Dalaya palvoelgyi und die die helfen wollten ;-)

kurze erklärung: :mod:

- clients.txt enthält die Rechnernamen in deren configurations datei das wort "acc_admin" vorkommt

- rt.txt enthält alle Rechnernamen

- file.bat ist die configurationsdatei die für jeden Rechner existiert

- "acc_admin" ist das wort nach dem gesucht wird und dessen zeile rausgelöscht werden soll

- \\server\dir1\dir2 is natürlich eine verfremdung unserer server strucktur ;-) deswegen ist das script warscheinlich auch nicht so leicht zu verstehen wenn man nur drüberliest.

remove.bat:

==========

@echo off

call clients.bat

pause

FOR /F "eol=; tokens=1,2* " %%i in (clients.txt) do call :setenv %%i

goto :end

:setenv

FOR /F "eol=R tokens=1,2,3,4,5* " %%i in (\\server\dir1\dir2\%1\file.bat) do call :setenvedit %1 %%i %%j %%k

rename \\server\dir1\dir2\%1\file.bat file.bat-old

rename \\server\dir1\dir2\%1\filenew.bat file.bat

goto :eof

:setenvedit

echo %2 %3 %4 | find /i "acc_admin"

if errorlevel 1 echo %2 %3=%4 >> \\server\dir1\dir2\%1\filenew.bat

goto :eof

:end

echo "Fertig!"

clients.bat:

============

del clients.txt

dir /b \\server\dir1\dir2\ >> rt.txt

FOR /F "eol=; tokens=1,2* " %%i in (rt.txt) do call :checkrt %%i

goto :end

:checkrt

type \\server\dir1\dir2\%1\file.bat | find /i "acc_admin"

if errorlevel 1 goto :end

echo %1 >> clients.txt

goto :eof

:end

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...