Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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?

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

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

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

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.