donnobre
Goto Top

Variablen der ersten 5 zeilen ALLER Txt datein in einem Verzeichnis wiedergeben

Hallo zusammen
Also was ich brauch möchte ist:
diese batch in dem verzeichnis alle txt datein suchen. von der ersten Txt datei zeile 1-5 auslesen und als var speichern
jetzt pingt er die ip an und sagt ob er online ist oder nicht
ab gehts zur 2ten txt datei. "" Problem ist das die txt dateien keinen festen namen haben sondern aus RechnernamenUsername.txt bestehen

@echo off & setlocal

::Aktuelles Verzeichnis
cd /d "%~dp0"
Set AKT=%CD%
cd %AKT%
set AKT=%CD%

::dateityp
set "AltTyp=txt"

:: hier soll er eigendlich alle Txt datein im
:: aktuellen verzeichniss nehmen
:: und irgendwo hier steckt der wurm drin da er dies nicht tut. wo ist mein denkfehler?
for %%b in ('dir /b /od "%AKT%\*.%AltTyp%"') do call :Abfrage %%b


:Abfrage
:: hier liest er die werte aus die in der zeile 1-5 in jeder Txt
:: datein stehen
:: das sind PCname,Username,Datum,Zeit,WANIP
:: und diesere werden in variablen gespeichert
For %%a in (%%b) do (
Set /a "n=1"
call :Schleife
set PCNAME=%Var%

Set /a "n=2"
call :Schleife
set USERNAME=%Var%

Set /a "n=3"
call :Schleife
set DATUM=%Var%

Set /a "n=4"
call :Schleife
set ZEIT=%Var%

Set /a "cnt=1
Set /a "n=5"
call :Schleife
set WANIP=%Var%


:: jetzt soll er die werte die varaiblen nehmen und ausgeben
ping /n 1 %WANIP%
if errorlevel 1 goto nichtda
echo PC ist DA
call :WER
:: wenn er hier ferig ist soll er wieder zur ersten abfrage gehen
:: also der Txt abfrage und zur nächsten datei gehen
)

:nichtda
echo PC ist NICHT da
call :WER
goto :eof

:Schleife
Set /a "cnt=1
for /F "delims=; Tokens=*" %%i in (%%b) do call :setvarFixLine %n% "%%i"
goto :eof

:Wer
echo.
echo "%USERNAME% mit %PCNAME% am %DATUM% um %ZEIT%"
echo.
echo "mit der IP: %WANIP% JETZT IST %TIME%"
ping -n 1 -w 3000 1.2.3.4>nul


:setvarFixLine
If %cnt%==%1 Set "Var=%~2"
Set /a "cnt+=1"
goto :eof

:eof

Content-ID: 167076

Url: https://administrator.de/contentid/167076

Ausgedruckt am: 23.11.2024 um 09:11 Uhr

Clijsters
Clijsters 27.05.2011 um 20:00:46 Uhr
Goto Top
REM Hallo-Gruß o.Ä.

FOR /F ["Optionen"] %Variable IN (Dateiensatz) DO Befehl [Parameter]

So spuckte es mir zumindest die Hilfe von Win aus...

REM Tschüß-Gruß

REM Dominique

:eof face-wink
DONNobre
DONNobre 27.05.2011 um 20:15:05 Uhr
Goto Top
ne selbst wenn ich es nach dem muster mache geht es leider nicht ... irgendwie übergebe ich die var falsch nur hab keine idee wo
Friemler
Friemler 27.05.2011 um 20:15:28 Uhr
Goto Top
Hallo DONNobre,

Du programmierst, wie Du Texte schreibst...

Für den ersten Teil, das Einlesen der Variablen, mache ich mal folgenden Vorschlag. Hole Dir daraus Anregungen zur Lösung Deines anderen Problems. Oder aus meinem Tutorial zur FOR-Schleife.
@echo off

setlocal

::Aktuelles Verzeichnis
cd /d "%~dp0"  
Set "AKT=%CD%"  

::dateityp
set "AltTyp=txt"  


set "Vars=PCName UserName Datum Zeit WANIP"  

for /f "delims=" %%f in ('dir /b /od "%AKT%\*.%AltTyp%" 2^>NUL') do (  
  for /f "tokens=1* delims=:" %%k in ('findstr /n "^" "%%f"') do (  
    if %%k leq 5 (
      set "line=%%l"  
      call :SetVar %%k
    )
  )
  call :ProcessData
)

exit /b


:SetVar
for /f "tokens=%1" %%v in ("%Vars%") do set "%%v=%line%"  
exit /b


:ProcessData
echo %PCName%
echo %UserName%
echo %Datum%
echo %Zeit%
echo %WANIP%
exit /b

Gruß
Friemler
DONNobre
DONNobre 27.05.2011 um 20:38:49 Uhr
Goto Top
das man mehrere var in einer zeile programieren kann "set "Vars=PCName UserName Datum Zeit WANIP" war mit komplett neu
danke erstmal sieht klar viel besser aus

ich hab die batch noch nicht getestet aber es sieht echt nett aus ...
wobei mit auf den ersten blick auffält das er nur einmal die ganzen daten ausgibt
Friemler
Friemler 27.05.2011 um 20:42:39 Uhr
Goto Top
Hallo DONNobre,

Zitat von @DONNobre:
wobei mit auf den ersten blick auffält das er nur einmal die ganzen daten ausgibt

Deine Rechtschreibung und der Satzbau wird besser face-wink .... mein Script auch. Der Fehler ist behoben.

Zitat von @DONNobre:
das man mehrere var in einer zeile programieren kann "set "Vars=PCName UserName Datum Zeit WANIP" war mit komplett neu

Ähem, ich "programmiere" damit keine Variablen. Ich definiere nur die Variable Vars, die die Namen aller zu setzenden Variablen enthält. Dieser String wird in Zeile 29 über den Parameter %1 inidiziert und die korrespondierende Variable gesetzt.

Gruß
Friemler
DONNobre
DONNobre 27.05.2011 um 20:57:33 Uhr
Goto Top
JA ich weiß meine Rechtschreibung ist nicht immer die beste ich lese mir nicht immer ein 2tes mal durch was ich geschrieben habe. Ich sitze aber auch nicht vor der Tastatur. Aber ich gelobe besserung face-smile

also mit sagt er ... datei nicht gefunden ....
Clijsters
Clijsters 27.05.2011 um 21:00:05 Uhr
Goto Top
Ich sitze aber auch nicht vor der Tastatur

Also ich finds lustig.....
Friemler
Friemler 27.05.2011 um 21:02:35 Uhr
Goto Top
Hallo DONNobre,

Zitat von @DONNobre:
also mit sagt er ... datei nicht gefunden ....

dann hat Du das Script nicht aus dem Verzeichnis gestartet, in dem die txt-Dateien liegen oder dort gibt es keine txt-Dateien.

Gruß
Friemler
DONNobre
DONNobre 27.05.2011 um 21:03:32 Uhr
Goto Top
nun ist auch so face-smile bin gerade über Teamviewer drin. Legt ihr echt so viel wert auf die rechtschreibung?
DONNobre
DONNobre 27.05.2011 um 21:07:29 Uhr
Goto Top
öhm doch .. sind 2 .txt dateien drin
Friemler
Friemler 27.05.2011 um 21:07:50 Uhr
Goto Top
Zitat von @DONNobre:
Legt ihr echt so viel wert auf die rechtschreibung?

Hauptsache, man braucht keinen Descrambler zum Lesen face-wink

Gruß
Friemler
Friemler
Friemler 27.05.2011 um 21:10:47 Uhr
Goto Top
Hallo DONNobre,

  • Hast du den Quelltext aus dem Fenster, das erscheint, wenn man auf Quelltext oben rechts über der Box mit dem Code klickt, kopiert?
  • @echo off raus
  • Script aus einem Konsolenfenster starten und Scriptlauf verfolgen

Gruß
Friemler
DONNobre
DONNobre 27.05.2011 um 21:20:13 Uhr
Goto Top
deswegen ja hatte ich schon gemacht

C:\Batch>setlocal
C:\Batch>cd /d "C:\Batch\"
C:\Batch>Set AKT=C:\Batch
C:\Batch>set "AltTyp=txt"
C:\Batch>set "Vars=PCName UserName Datum Zeit WANIP"
C:\Batch>set /a idx=1
C:\Batch>for /F "delims=" %f in ('dir /b /od "C:\Batch \*.txt"') do (for /F "use
backq delims=" %l in ("%f") do (
set "line=%l"
call :SetVar
set /a idx+=1
) )
Datei nicht gefunden

C:\Batch>echo
ECHO ist eingeschaltet (ON).
C:\Batch>echo DON
Daniel R. Nobre
C:\Batch>echo
ECHO ist eingeschaltet (ON).
C:\Batch>echo
ECHO ist eingeschaltet (ON).
C:\Batch>echo
ECHO ist eingeschaltet (ON).
C:\Batch>pause
Drücken Sie eine beliebige Taste . . .


und eine txt mit inhalt ist auch vorhanden
PC
DON
21.05.2011
19:00:44,90
85.176.34.11
Friemler
Friemler 27.05.2011 um 21:27:45 Uhr
Goto Top
Hallo DONNobre,

benutze doch bitte die , das lässt sich auch noch nachträglich machen face-wink.

Da hat sich in Zeile 3 der Ausgabe ein böses Leerzeichen an den Pfad angehängt, deshalb lautet die Suchmaske "C:\Batch \*.txt". Kopiere Dir nochmal den Script-Code, ich habe in der entsprechenden Zeile "Gegenmaßnahmen" eingebaut.

Gruß
Friemler
DONNobre
DONNobre 27.05.2011 um 21:36:30 Uhr
Goto Top
du bist der hammer
als du es schriebst viel es mir auch auf face-smile
in der zeile
Set AKT=%CD%
hatte ich zum schluß ein leerzeichen .. das natürlich übernommen wurde.

batch gestartet und funkt.
ABER er liest nur 1ne txt und beendet sich dann
Friemler
Friemler 27.05.2011 um 21:40:09 Uhr
Goto Top
Hallo DONNobre,

Zitat von @DONNobre:
ABER er liest nur 1ne txt und beendet sich dann

tja, dann die obigen Schritte zum debuggen wiederholen...

[EDIT]
Erwarte nicht, dass er Dir den Inhalt beider Dateien ausgibt ! Wenn eine Datei ausgelesen wurde, muss nach Zeile 21 ein Unterprogramm aufgerufen werden, um die Eingabe zu verarbeiten!
[/EDIT]

[EDIT2]
Unterprogramm ist eingebaut.
[/EDIT2]

Gruß
Friemler
DONNobre
DONNobre 27.05.2011 um 22:09:37 Uhr
Goto Top
Nun genau das war ja mein "eigendliches" Problem

ausser das unsaubere Programieren
Friemler
Friemler 27.05.2011 um 22:13:06 Uhr
Goto Top
Hallo DONNobre,

siehe mein letztes Posting.

Gruß
Friemler
DONNobre
DONNobre 27.05.2011 um 22:21:15 Uhr
Goto Top
Super ... wenn du eine frau währest würde ich dich glatt heiraten face-smile
Friemler
Friemler 27.05.2011 um 22:23:28 Uhr
Goto Top
Nee, lass' mal. Ich liebe meine Freiheit face-wink