guppinator
Goto Top

For-Schleife Batch

Hallo,
ich habe ein kleines Batch-Tool gemacht, jedoch funktioniert die for-Schleife nicht. Wie kann ich mein kleines Problem in der 3. und 4. Zeile lösen?

LG

@echo off
set "ho=Platz"  
FOR /L %%t IN (16,1,27) DO (
FOR /L %%x IN (1,1,11) DO (
if exist %systemdrive%\Log\*.txt del /F /S /Q %systemdrive%\Log\*.txt
if not exist %systemdrive%\Log md %systemdrive%\Log
if exist \\%ho%%%t\C$\ rename \\%ho%%%t\C$\Neu.txt Neu%%x.fcx && xcopy /C /Q /H \\%ho%%%t\C$\Neu%%x.fcx %systemdrive%\Log
)
)
pause > NUL
cls
echo Schritt 1 erledigt!
ping -n 2 localhost > NUL
cls
cd %systemdrive%\Log

FOR /L %%u IN (1,1,12) DO (
FOR %%b IN (Neu%%u.fcx) DO type %%b
echo.
pause > NUL


[Edit Biber] Inhaltlicher Doppelpost zu Benutzernamen im Netzwerk auslesen.
Und auch noch WTHF in "Tools & Utilities" gesetzt.
Ich verschiebe es erstmal nach "Batch & Shell".
[/Edit]

Content-Key: 107330

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

Printed on: April 25, 2024 at 00:04 o'clock

Mitglied: 60730
60730 Jan 28, 2009 at 09:23:37 (UTC)
Goto Top
Moinsen,

Zeile 5 & 6 könnte doch auch außerhalb der beiden Schleifen liegen.
Lediglich Zeile 7 ist "sinnvoll" in der Schleife, da nur dort auch ein "geschleifter Zähler" benutzt wird.

Ich schau mir das nacher nochmal an, und bis dahin trink ich erst mal einen Kaffee.
Aber so wie ich es sehe, solltest du entweder (das hab ich im letzten Thread noch nicht verstanden) - die Logs so nennen, wie den Zähler des jeweiligen Systems, oder den Log Zähler in einer set /a Schleife hochzählen.

Gruß
Member: Guppinator
Guppinator Jan 28, 2009 at 12:10:20 (UTC)
Goto Top
Die Datei, die beim Autostart gestartet wird:

'name.bat'
Der Inhalt der Datei:

@echo off
echo %username% > %computername%.txt
rename %computername%.txt %computername%.fcx
exit

Meine Datei:

'einsammeln.bat'
Der Inhalt der Datei:

@echo off
if not exist %systemdrive%\Log md %systemdrive%\Log
if exist %systemdrive%\Log\*.fcx del /F /S /Q %systemdrive%\Log\*.fcx
set "ho=Platz"  
FOR /L %%t IN (16,1,27) DO (
if exist \\%ho%%%t\C$\ xcopy /C /Q /H \\%ho%%%t\C$\*.fcx %systemdrive%\Log
)
pause > NUL
cls
echo Schritt 1 erledigt!
ping -n 2 localhost > NUL
cls
cd %systemdrive%\Log
set "ho=Platz"  
FOR /L %%i IN (16,1,27) DO (
FOR %%y IN (%ho%%%i.fcx) DO echo %%y
FOR %%b IN (%ho%%%i.fcx) DO type %%b
)
pause > NUL

Müsste so funktionieren, oder?
Member: bastla
bastla Jan 28, 2009 at 13:31:16 (UTC)
Goto Top
Hallo Guppinator!
Müsste so funktionieren, oder?
Ließe sich selbst testen, oder? face-wink
Für Deine "name.bat" würde eigentlich eine Zeile genügen:
@echo %username%>C:\%computername%.fcx
Im Gegenzug könntest Du dann die Zeile 6 der "einsammeln.bat" etwas sicherer machen:
if exist \\%ho%%%t\C$\*.fcx xcopy /C /Q /H \\%ho%%%t\C$\*.fcx %systemdrive%\Log
Schließlich sollte für die Zeilen 14 bis 17 genügen:
FOR /L %%i IN (16,1,27) DO if exist %ho%%%i.fcx (echo %ho%%%i.fcx & type %ho%%%i.fcx)
Auch diese Zeilen solltest (im Fall des Falles) Du testen (ich hab's jedenfalls nicht gemacht face-wink).

Grüße
bastla
Member: Guppinator
Guppinator Jan 28, 2009 at 15:17:29 (UTC)
Goto Top
Ja, auf jeden Fall schonmal Danke für die Antworten face-wink
Also ich programmiere das nicht für mich, sondern ein Lehrer meiner Schule fragte mich, ob es möglich sei so ein Programm zu programmieren. Also habe ich mich drangesetzt. Ich kann das jedoch nicht vorher ausprobieren bevor ich mir nicht 100% sicher bin, dass es geht. Weil wenn ich es ausprobieren wollte müsste auf alle Rechner im Computerraum ein neues Image aufgespielt werden, da Windows bei uns auf der Schule bei jedem starten von einem Image neu gestartet wird (d.h. alle zuvor erstellten Daten gehen verloren).
Member: bastla
bastla Jan 28, 2009 at 15:50:04 (UTC)
Goto Top
Hallo Guppinator!

Da Du ja Admin-Rechte hast, sollte es eigentlich kein Problem sein, eine passende .fcx-Datei bei laufendem Rechner (remote) zu erstellen und dann das "Einsammeln" zu testen - wenn dabei nur einige Geräte eingeschaltet sind, wirst Du vielleicht auch noch auf die Idee kommen, vor dem "if exist" ein "ping" zu platzieren ...

Grüße
bastla
Member: Guppinator
Guppinator Jan 28, 2009 at 16:12:17 (UTC)
Goto Top
Hi bastla,

Du meinst:
ping -t -n 1 Host
?
Ich kenne mich mit 'Ping' nicht so aus... Was würde mir das bringen, oder wie genau würdest Du das mit in mein Script einbinden?

LG
Mitglied: 60730
60730 Jan 28, 2009, updated at Oct 18, 2012 at 16:37:40 (UTC)
Goto Top
Servus Guppi,

jetzt schaust du dir bitte nochmal diesen genau an:

Das war / ist eine Anleitung die nicht nur funktioniert, sondern auch zeigen soll(te), wie man mit Haus & Boardmitteln genau das hinbekommt, was du haben willst - gut die Fernsteuerung willst du nicht, du willst nur "den Rest".
Und das kannst du dann auch gerne verändern, anpassen und bitte auch "lernen" wie das "komplexe" denn so läuft. - Den zum lernen war die Anleitung auch gedacht.
Auch wenn die Überschrift "irreführend ist" und es zig bessere Anleitungen zum Thema auf Administrator gibt - schaus dir bitte trotzdem an face-wink

Gruß
Member: bastla
bastla Jan 28, 2009 at 16:31:01 (UTC)
Goto Top
Hallo Guppinator!
Was würde mir das bringen,
Kürzere Wartezeiten, wenn Du bereits vorweg damit feststellst, dass ein Rechner derzeit nicht erreichbar ist.
oder wie genau würdest Du das mit in mein Script einbinden?
Vor Zeile 6; "wie" hängt von den verwendeten BS ab ...

Grüße
bastla
Member: Guppinator
Guppinator Jan 28, 2009 at 18:21:28 (UTC)
Goto Top
hi bastla,

das BS ist bei uns Windows XP HE.

@timobeil: Wir haben schon ein solches Programm auf den Schulrechnern, jedoch kann dieses Programm nicht den angemeldeten User anzeigen und das Tool hat einfach zu viele Funktionen. Ich möchte gerne ein Programm mit nur einer Funktion haben und diese Funktion soll eben nur das anzeigen vom Computer- und Benutzernamen sein. Aber vielen Dank für den Vorschlag! face-wink Ausprobiert habe ich das Tool, jedoch hat es bei mir nicht funktioniert. Ich gebe einen PC im Netzwerk an und das Programm macht nichts weiter.

LG
Mitglied: 60730
60730 Jan 28, 2009 at 18:40:13 (UTC)
Goto Top
Hai Guppi - oder darf ich schon Thunfisch sagen?

Remote.cmd von besagtem Link und rem Remote.cmd mal beide ausgedruckt nebeneinander legen.

Ausprobiert habe ich das Tool, jedoch hat es bei mir nicht funktioniert.
Ähh das sind zwei - eines (Info.cmd), das die Daten erzeugt und eines (Remote.cmd) zum auslesen.

Also nochmal zurück...

Remote.cmd und die Rem dazu.

Zeile 19 -26 - dort ist genau das beschrieben, was Bastlas Tipp war.
Bzw. eigentlich nur in Zeile 20, aber wir wollen ja irgendwann mal dieses Thema abhaken und nicht Zeile für Zeile neu erfinden.

Gruß
Member: Guppinator
Guppinator Jan 28, 2009 at 19:19:00 (UTC)
Goto Top
Sorry, kann sein, dass es bei dir geht, bei mir geht es auf jeden fall nicht...

Aber was bringt mir bitte ping -n 1 Host?
Den Befehl habe ich hier ja bereits gepostet. Aber ich wollte ja wissen, was mir dieser Befehl bringt, und wie ich ihn genau benutzen kann. Bringts der Befehl überhaupt, wenn ich schon eine Überprüfung der Hosts gemacht habe? Siehe Zeile 6.

LG

@echo off
if not exist %systemdrive%\Log md %systemdrive%\Log
if exist %systemdrive%\Log\*.fcx del /F /S /Q %systemdrive%\Log\*.fcx
set "ho=Platz"  
FOR /L %%t IN (16,1,27) DO (
if exist \\%ho%%%t\C$\*.fcx xcopy /C /Q /H \\%ho%%%t\C$\*.fcx %systemdrive%\Log
)
pause > NUL
cls
echo Schritt 1 erledigt!
ping -n 2 localhost > NUL
cls
cd %systemdrive%\Log
set "ho=Platz"  
FOR /L %%i IN (16,1,27) DO (
FOR %%y IN (%ho%%%i.fcx) DO echo %%y && FOR %%b IN (%ho%%%i.fcx) DO type %%b
)
cls
echo Daten sichern? (y/n)
set /p pu=
if /I "%p%"=="y" goto y  
if /I "%p%"=="n" goto n  
:y
if not exist %systemdrive%\Log\history md %systemdrive%\Log\history
set "ho=Platz"  
FOR /L %%f IN (16,1,27) DO (
if not exist %systemdrive%\Log\history\%ho%%%f md %systemdrive%\Log\history\%ho%%%f
xcopy /C /Q /H %ho%%%f.fcx %systemdrive%\Log\history\%ho%%%f && rename %systemdrive%\Log\history\%ho%%%f\%ho%%%f.fcx %date%%ho%%%f.fcx
cls
echo Speichern abgeschlossen!
ping -n 2 localhost > NUL
exit
:n
exit
)
pause > NUL
Mitglied: 60730
60730 Jan 28, 2009 at 19:30:00 (UTC)
Goto Top
*schnief*

Zeile 21: if /I "%p%"=="y" goto y
Zeile 22: :y

er geht immer von 21 auf 22 - egal, was du da eintippst.
Zeile 06

Aber was bringt mir bitte ping -n 1 Host

Ping - versucht lediglich eine Antwort auf ganz unterer Layer Basis vom Ziel zu bekommen - der kommt sehr schnell / oder auch nicht.

if exist \\%ho%%%t\C$ - ist da schon "fieser" - denn da zum erfüllen von "exist" muß sich das Script ja auch erstmal mit dem Ziel (das vielleicht) gar nicht an ist - mit dessen c$ verbinden.

ping -n 1%ho%%%t && if exist \\%ho%%%t\C$ usw. ist das was du als "selbstschreibener" Programmierer eigentlich daraus machen solltest, was Bastla dir geraten hat.

Mittlerweile darfst du gerne ein
Rem [c] By Bastla
Rem [c] By Biber
an den Header "deines" Programms schreiben face-wink

gruß
Member: Guppinator
Guppinator Jan 28, 2009 at 20:29:01 (UTC)
Goto Top
So, ich habe das Programm jetzt nochmal überarbeitet.....

@echo off
if not exist %systemdrive%\Log md %systemdrive%\Log
if exist %systemdrive%\Log\*.fcx del /F /S /Q %systemdrive%\Log\*.fcx
set "ho=Platz"  
FOR /L %%t IN (16,1,27) DO (
ping -n 1 %ho%%%t && if exist \\%ho%%%t\C$\*.fcx xcopy /C /Q /H \\%ho%%%t\C$\*.fcx %systemdrive%\Log
)
cls
echo Schritt 1 erledigt!
ping -n 2 localhost > NUL
cls
cd %systemdrive%\Log
set "ho=Platz"  
FOR /L %%i IN (16,1,27) DO (
FOR /L %%l IN (%ho%%%i.fcx) DO echo %%l && FOR /L %%b IN (%ho%%%i.fcx) DO type %%b
)
cls
:wdh
echo Daten sichern? (y/n)
set /p pu=
if /I "%pu%"=="y" goto y  
if /I "%pu%"=="n" goto n  
goto wdh
:y
if not exist %systemdrive%\Log\history md %systemdrive%\Log\history
set "ho=Platz"  
FOR /L %%f IN (16,1,27) DO (
if not exist %systemdrive%\Log\history\%ho%%%f md %systemdrive%\Log\history\%ho%%%f
xcopy /C /Q /H %ho%%%f.fcx %systemdrive%\Log\history\%ho%%%f && rename %systemdrive%\Log\history\%ho%%%f\%ho%%%f.fcx %date%%ho%%%f.fcx
)
cls
echo Speichern abgeschlossen!
ping -n 2 localhost > NUL
exit
:n
exit


Achsoo, das mit dem Copyright muss ich gleich noch dazu schreiben face-wink
Bist du so mit dem Quelltext zufrieden? face-wink

LG