WinFuture-Forum.de: Variable aus Schleife übernehmen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Variable aus Schleife übernehmen Variable aus Schleife übernehmen


#1 Mitglied ist offline   casi4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 34
  • Beigetreten: 26. April 19
  • Reputation: 0

geschrieben 17. Februar 2020 - 09:11

Hallo allerseits,

ich habe ein kleines Batchproblem und hoffe hier kennt sich jemand aus. Es geht um folgendes kleines Script.

@Echo Off
mode con lines=10 cols=60
COLOR b
set "NET=192.168.100"

CD /D %~dp0
FOR /L %%f in (60, 1, 255) do (
ping -n 1 -w 10 %NET%.%%f>nul 2>&1 && ( 
	FOR /F "tokens=2" %%a in ('systeminfo /s %NET%.%%f /u administrator /p passwortd ^|findstr /i host') do set Adresse=%%a>nul 2>&1
        echo %Adresse%	  
FOR /F %%u IN ('dir /b /a:d \\%NET%.%%f\C$\Users') DO (
  FOR /F "usebackq delims=" %%t IN (desktop.txt) DO ROBOCOPY "\\%NET%.%%f\c$\users\%%u\%%t" "%~dp0\set\profile\%NET%.%%f_%Adresse%\%%u\%%t" /PURGE /B /E /R:0 /ZB
)
        ) || (
ECHO %NET%.%%f Host aus / Nicht erreichbar
        )
)





Es sollen über eine FOR / L Schleife mehere Rechner abgefragt werden, und bestimmte, Verzeichnisse, die in einer txt hinterlegt sind, kopiert werden.

So weit tut er es auch, er speichert die Ordner in jeweils in einen Ordner mit der dazugehörigen IP ab. Ich möchte aber lieber den Namen des PC haben und habe deshalb nach der Pingzeile noch eine Zeile eingefügt um diesen auszulesen, in der Befehlszeile funktioniert das auch, aber nicht in diesem Batch, er scheint den Namen nicht in %Adresse abzuspeichern, oder mag er das nicht in der Pfadangabe?

Kennt sich hier jemand aus? Ich wäre sehr dankbar, wenn auf mein freundliches Hilfegesuchen keine Grundatzfragen kommen würden, warum ich kein Powershell oder sonst was nehme, oder warum überhaupt...


Danke i.V.


lg


chris

Dieser Beitrag wurde von casi4711 bearbeitet: 17. Februar 2020 - 11:54

0

Anzeige



#2 Mitglied ist offline   Gispelmob 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.591
  • Beigetreten: 14. August 15
  • Reputation: 392

geschrieben 17. Februar 2020 - 21:03

Adresse=%%a>nul 2>&1

sieht für mich aus, als ob du da ein Leerzeichen vergessen hast und der ganze Ausdruck dadurch unterdrückt wird
AMD Ryzen 9 5950X, Asus ROG Strix X570-F Gaming, 32GB Corsair DDR4-3200, Asus Geforce GTX 3060 12GB, Creative Sound Blaster AE-7, 240GB SSD, 500GB SSD, 3x 1TB SSD, Win11 Home, 4x Acer G246HL Bbid, Logitech MX518 Gaming Mouse, Logitech G440 Mousepad, Logitech K120 Keyboard, Razer Tiamat 7.1 V2 Headset, Creative Inspire 5.1 5300 Soundsystem
0

#3 Mitglied ist offline   casi4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 34
  • Beigetreten: 26. April 19
  • Reputation: 0

geschrieben 18. Februar 2020 - 18:42

Du meinst hiter dem a ein Lerzeichen? Habs jetzt so:

FOR /F "tokens=2" %%a in ('systeminfo /s %NET%.%%f /u administrator /p passwortd ^|findstr /i host') do set Adresse=%%a >nul 2>&1

Er schreibt die Dateien trotzdem nur in Verzeichnisse der Form 192.168.100.23_
er soll den rechnenamen direkt hinter den _ hängen


LG

Chris

Dieser Beitrag wurde von casi4711 bearbeitet: 18. Februar 2020 - 18:54

0

#4 Mitglied ist offline   Gispelmob 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.591
  • Beigetreten: 14. August 15
  • Reputation: 392

geschrieben 18. Februar 2020 - 19:33

Die Verkettung des findstr mit | funktioniert bei mir nicht solang da ein ^ davor ist. Ohne klaptt es.

Als findstr lieber Hostname nehmen und nicht nur host, denn sonst gibt es wie bei mir eine 2. Zeile mit VirtualBox Host-Only Ethernet Adapter der dann aber nicht der Systemname ist.

Dieser Beitrag wurde von Gispelmob bearbeitet: 18. Februar 2020 - 19:34

AMD Ryzen 9 5950X, Asus ROG Strix X570-F Gaming, 32GB Corsair DDR4-3200, Asus Geforce GTX 3060 12GB, Creative Sound Blaster AE-7, 240GB SSD, 500GB SSD, 3x 1TB SSD, Win11 Home, 4x Acer G246HL Bbid, Logitech MX518 Gaming Mouse, Logitech G440 Mousepad, Logitech K120 Keyboard, Razer Tiamat 7.1 V2 Headset, Creative Inspire 5.1 5300 Soundsystem
0

#5 Mitglied ist offline   casi4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 34
  • Beigetreten: 26. April 19
  • Reputation: 0

geschrieben 18. Februar 2020 - 20:29

Danke Dir,

also jetz habe ich es so:

set "NET=192.168.178"

CD /D %~dp0
FOR /L %%f in (20, 1, 255) do (
ping -n 1 -w 10 %NET%.%%f>nul 2>&1 && ( 
        FOR /F "tokens=2" %%a in ('systeminfo /s %NET%.%%f /u administrator /p passwortd |findstr /i host') do set Adresse=%%a >nul 2>&1
        echo %Adresse%    
FOR /F %%u IN ('dir /b /a:d \\%NET%.%%f\C$\Users') DO (
  FOR /F "usebackq delims=" %%t IN (desktop.txt) DO ROBOCOPY "\\%NET%.%%f\c$\users\%%u\%%t" "%~dp0\set\profile\%NET%.%%f_%Adresse%\%%u\%%t" /PURGE /B /E /R:0 /ZB
)
        ) || (
ECHO %NET%.%%f Host aus / Nicht erreichbar




Das Dosfenster blitz jetzt nur kurz auf und es passiert nichts, bei mir braucht er dieses Dach. Zur Veranschaulichung noch mal, so soll er das am Ziel abspeichern, ich denke ich schreibe manchmal etwas mißverständlich:


Profile

rechner 1 rechner 2 rechner 3 rechner 4

user 1 user2 user1 user2.........

Verz1 verz2 Verz1 Verz2 ......



lg

chris

Dieser Beitrag wurde von casi4711 bearbeitet: 18. Februar 2020 - 20:55

0

#6 Mitglied ist offline   Shannon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 131
  • Beigetreten: 12. Februar 13
  • Reputation: 11
  • Geschlecht:unbekannt

geschrieben 18. Februar 2020 - 20:59

probier mal:


@Echo Off
Setlocal EnableDelayedExpansion

mode con lines=10 cols=60
COLOR b
set "NET=192.168.100"

CD /D %~dp0
FOR /L %%f in (60, 1, 255) do (
ping -n 1 -w 10 %NET%.%%f>nul 2>&1 && ( 
        FOR /F "tokens=2" %%a in ('systeminfo /s %NET%.%%f /u administrator /p passwortd ^|findstr /i host') do set Adresse=%%a>nul 2>&1
        echo !Adresse!    
FOR /F %%u IN ('dir /b /a:d \\%NET%.%%f\C$\Users') DO (
  FOR /F "usebackq delims=" %%t IN (desktop.txt) DO ROBOCOPY "\\%NET%.%%f\c$\users\%%u\%%t" "%~dp0\set\profile\%NET%.%%f_%Adresse%\%%u\%%t" /PURGE /B /E /R:0 /ZB
)
        ) || (
ECHO %NET%.%%f Host aus / Nicht erreichbar
        )
)




g.s.
0

#7 Mitglied ist offline   casi4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 34
  • Beigetreten: 26. April 19
  • Reputation: 0

geschrieben 18. Februar 2020 - 21:19

Danke hab ich probiert,

er ignoriert aber nach wie vor die Variable %Adresse% und schreibt nur in die Oberornder 192.168.100.10_. Schade, hätte echt nicht gedacht dass das so problematisch sei.


LG


chris
0

#8 Mitglied ist offline   casi4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 34
  • Beigetreten: 26. April 19
  • Reputation: 0

geschrieben 18. Februar 2020 - 21:58

So ich habs jetzt rausgefunden durch Zufall, die Variable muß in diesem Fall nicht duch %% eingeschlossen werden, sondern mit !!, das sieht dann so aus, für alle die es interessiert



@Echo Off
Setlocal EnableDelayedExpansion

::mode con lines=10 cols=60
COLOR b
set "NET=192.168.100"

CD /D %~dp0
FOR /L %%f in (20, 1, 255) do (
ping -n 1 -w 10 %NET%.%%f>nul 2>&1 && ( 
        FOR /F "tokens=2" %%a in ('systeminfo /s %NET%.%%f ^|findstr /i hostname') do set Adresse=%%a>nul 2>&1
        echo !Adresse!    
FOR /F %%u IN ('dir /b /a:d \\%NET%.%%f\C$\Users') DO (
  FOR /F "usebackq delims=" %%t IN (desktop.txt) DO ROBOCOPY "\\%NET%.%%f\c$\users\%%u\%%t" "%~dp0\set\profile\%NET%.%%f_!Adresse!\%%u\%%t" /PURGE /B /E /R:0 /ZB>nul 2>&1
)
        ) || (
ECHO %NET%.%%f Host aus / Nicht erreichbar
        )
)



Da muss man erst mal drauf kommen, dass komische nur, es dauert irgendwie ewig lange, vielleicht gibts da doch noch ne andere Syntax

lg


chris

Dieser Beitrag wurde von casi4711 bearbeitet: 18. Februar 2020 - 22:10

0

#9 Mitglied ist offline   casi4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 34
  • Beigetreten: 26. April 19
  • Reputation: 0

geschrieben 19. Februar 2020 - 09:18

Ich nehm es erst mal zurück, funktionierte nur bei mir lokal zu Hause aber nicht im Netzwerk, hat noch jemand ne Idee?
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0