el3ment
Goto Top

Zahl am Ende einer Variable hochzählen und dann neu befüllen

Hallo, ich möchte mit der Batch Datei auf mehreren Rechnern prüfen ob es eine bestimmte Datei gibt.
Dabei habe ich das Problem, dass die Variable "rechner" immer nur rechner_1, rechner_2 usw. ist und nicht der rechnername welcher oben definiert ist. ist denke ich nichts großes aber ich komme einfach nicht darauf.

@echo off
set count=1
set rechneranzahl=4

set dateipfad=c$\Programme\sap\saplogon.ini
set rechner_1=rechnername_bli
set rechner_2=rechnername_bla
set rechner_3=rechnername_blubb


:loop
set rechner=rechner_%count%

IF EXIST "\\%rechner%\%dateipfad%" (echo %time%: %rechner%: Datei vorhanden  >> c:\temp\log.log) ELSE (echo %time%: %rechner%: Datei nicht vorhanden >> c:\temp\log.log)  

set /a COUNT=%COUNT%+1
if (%COUNT%) == (%rechneranzahl%) goto END
goto loop


:end

Content-Key: 186481

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

Printed on: April 19, 2024 at 17:04 o'clock

Member: bastla
bastla Jun 14, 2012 updated at 11:24:43 (UTC)
Goto Top
Hallo el3ment und willkommen im Forum!

Versuch mal folgende Zeile 12:
call set "rechner=%%rechner_%count%%%"
Außerdem genügt als Zeile 16
set /a count+=1
Grüße
bastla
Member: el3ment
el3ment Jun 14, 2012 updated at 12:47:21 (UTC)
Goto Top
vielen dank, allerdings wird so auch nur %rechner_1% ausgegeben.

danke für den hinweis!
Member: bastla
bastla Jun 14, 2012 updated at 13:37:27 (UTC)
Goto Top
Hallo el3ment!

Kann ich nicht nachvollziehen ...

Gemeint hatte ich jedenfalls (noch leicht adaptiert):
@echo off & setlocal
set /a count=1
set /a arechneranzahl=3

set "dateipfad=c$\Programme\sap\saplogon.ini"  
set "rechner_1=rechnername_bli"  
set "rechner_2=rechnername_bla"  
set "rechner_3=rechnername_blubb"  


:loop
call set "rechner=%%rechner_%count%%%"  

IF EXIST "\\%rechner%\%dateipfad%" (echo %time%: %rechner%: Datei vorhanden  >> c:\temp\log.log) ELSE (echo %time%: %rechner%: Datei nicht vorhanden >> c:\temp\log.log)  

set /a count+=1
if %count% leq %rechneranzahl% goto :loop
Grüße
bastla
Member: el3ment
el3ment Jun 14, 2012 at 13:40:29 (UTC)
Goto Top
hatte den call Befehl nicht übernommen, der war es wohl!

Klasse, funktionier!

Vielen Dank!!!!
Member: bastla
bastla Jun 14, 2012 updated at 13:49:17 (UTC)
Goto Top
Hallo el3ment!

Freut mich ... face-smile

BTW: Von diesem "Pseudo-Array" mit indizierten Variablen halte ich übrigens eher wenig - das ließe sich (da ja ohnehin alle Rechner durchlaufen werden sollen) mit einer "for"-Schleife eleganter lösen, wobei die Rechner entweder in einer eigenen Textdatei aufgelistet werden oder (im Stil von Ur-Basic-DATA-Zeilen) auch im Batch selbst stehen könnten:
@echo off & setlocal
set "dateipfad=c$\Programme\sap\saplogon.ini"  
set "log=c:\temp\log.log"  

::DATA rechnername_bli
::DATA rechnername_bla
::DATA rechnername_blubb

for /f "tokens=1*" %%i in ('findstr /b "::DATA" "%~f0"') do call :ProcessComputer "%%j"  
goto :eof

:ProcessComputer
(if  exist "\\%~1\%dateipfad%" (  
    echo %time%: %rechner%: Datei vorhanden
) ELSE (
    echo %time%: %rechner%: Datei nicht vorhanden
))>>"%log%"  
goto :eof
Grüße
bastla
Member: el3ment
el3ment Jun 14, 2012 at 14:07:32 (UTC)
Goto Top
Wow, bin begeistert!

Habe davon ehrlich gesagt keine Ahnung, wollte einfach nur schnell ein kleines Script haben und nich manuel auf jeden Rechner einzeln schauen... :D

Das sieht natürlich professionell aus...