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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 167076
Url: https://administrator.de/contentid/167076
Ausgedruckt am: 23.11.2024 um 09:11 Uhr
20 Kommentare
Neuester Kommentar
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.
Gruß
Friemler
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
Hallo DONNobre,
Deine Rechtschreibung und der Satzbau wird besser .... mein Script auch. Der Fehler ist behoben.
Ähem, ich "programmiere" damit keine Variablen. Ich definiere nur die Variable
Gruß
Friemler
Zitat von @DONNobre:
wobei mit auf den ersten blick auffält das er nur einmal die ganzen daten ausgibt
wobei mit auf den ersten blick auffält das er nur einmal die ganzen daten ausgibt
Deine Rechtschreibung und der Satzbau wird besser .... 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
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
Hallo DONNobre,
dann hat Du das Script nicht aus dem Verzeichnis gestartet, in dem die
Gruß
Friemler
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
Hauptsache, man braucht keinen Descrambler zum Lesen
Gruß
Friemler
Hallo DONNobre,
benutze doch bitte die , das lässt sich auch noch nachträglich machen .
Da hat sich in Zeile 3 der Ausgabe ein böses Leerzeichen an den Pfad angehängt, deshalb lautet die Suchmaske
Gruß
Friemler
benutze doch bitte die , das lässt sich auch noch nachträglich machen .
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
Hallo DONNobre,
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
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