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-ID: 186481

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

Ausgedruckt am: 06.11.2024 um 01:11 Uhr

bastla
bastla 14.06.2012 aktualisiert um 13:24:43 Uhr
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
el3ment
el3ment 14.06.2012 aktualisiert um 14:47:21 Uhr
Goto Top
vielen dank, allerdings wird so auch nur %rechner_1% ausgegeben.

danke für den hinweis!
bastla
bastla 14.06.2012 aktualisiert um 15:37:27 Uhr
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
el3ment
el3ment 14.06.2012 um 15:40:29 Uhr
Goto Top
hatte den call Befehl nicht übernommen, der war es wohl!

Klasse, funktionier!

Vielen Dank!!!!
bastla
bastla 14.06.2012 aktualisiert um 15:49:17 Uhr
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
el3ment
el3ment 14.06.2012 um 16:07:32 Uhr
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...