132749
Goto Top

Frage zu SET - FOR in Batch

Hallo,

ich habe mal wieder eine Frage!
Wann benutzt man eine Abfrage als SET oder FOR und macht es Sinn diese zu kombinieren und warum?
@echo off &setlocal

set "key=HKLM\SOFTWARE\myProgramm"  
reg query "%key%" /v Version /reg:32 | findstr 2017 >nul 2>&1 || (  

  exit /b
)

@echo off &setlocal

set "key=HKLM\SOFTWARE\myProgramm"  
set "value=Drive"  
set "validdata=CDEF"  
set "drive="  

for /f "tokens=3" %%i in ('2^>nul reg query "%key%" /v "%value%" /reg:32 ^| findstr /reic:"\<[%validdata%]:*"') do set "drive=%%i"  
if not defined drive (

  exit /b
)

set "drive=%drive:~,1%:"  

Start "" "%drive%\myProgramm\start.exe  

ping -n 10 127.0.0.1 > NUL 2>&1

Kann ich nachfolgenden Befehl so ohne weiteres als Sprungmarke nutzen und wo bzw. wie setze ich das reg:32 richtig!
@echo
FOR /F "tokens=3 delims= " %%A IN ('REG QUERY "HKCU\Control Panel\International" /v sLanguage') DO SET Language=%%A  

:%Language%
Wo liegt der Unterschied zu nachfolgenden Befehl?
@echo
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKCU\Control Panel\International" /v sLanguage') DO SET Language=%%B  
:%Language%

Als letztes möchte ich mich bei Euch für die permanente Unterstützung und Problemlösung hier im Forum bedanken was sicherlich zu kurz kommt!

Gruß
kampen

Content-Key: 375825

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

Ausgedruckt am: 19.03.2024 um 06:03 Uhr

Mitglied: 136166
136166 03.06.2018 aktualisiert um 09:39:41 Uhr
Goto Top
Zitat von @132749:
Hallo,
Moin moin face-smile.
ich habe mal wieder eine Frage!
Wann benutzt man eine Abfrage als SET oder FOR und macht es Sinn diese zu kombinieren und warum?
> @echo off &setlocal
> 
> set "key=HKLM\SOFTWARE\myProgramm"  
> reg query "%key%" /v Version /reg:32 | findstr 2017 >nul 2>&1 || (  
> 
>   exit /b
> )
> 

For Schleifen benutzt man primär dazu um den Inhalt von Befehlsausgaben oder Text weiterzuverarbeiten.


Kann ich nachfolgenden Befehl so ohne weiteres als Sprungmarke nutzen
Nein, Variablen können nicht als Sprungmarke verwendet werden.

und wo bzw. wie setze ich das reg:32 richtig!
> @echo
> FOR /F "tokens=3 delims= " %%A IN ('REG QUERY "HKCU\Control Panel\International" /v sLanguage') DO SET Language=%%A  
> 
> :%Language%
> 
Hier:
@echo off
> FOR /F "tokens=2* delims= " %%a IN ('REG QUERY "HKCU\Control Panel\International" /v sLanguage /reg:32') DO SET "Language=%%b"  


Wo liegt der Unterschied zu nachfolgenden Befehl?
> @echo
> FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKCU\Control Panel\International" /v sLanguage') DO SET Language=%%B  
> :%Language%
> 
Der Unterschied ist der das es bei der ersten Variante Probleme gibt wenn im Wert Leerzeichen vorkommen können, dann wird nämlich nur das dritte Token übernommen und alles was folgt verworfen. Bei der zweiten Variante mit tokens=2* wird quasi das zweite Token genommen und der komplette Rest (*) der danach kommt einer weiteren Variablen zugewiesen, hier machen dann Leerzeichen nichts aus und werden mit übernommen. Da man hier das zweite Token ebenfalls einer Variablen zuweist (%%A) nimmt man dann beim Setzen der Variablen das %%B weil das ja dann unserem Registry-Wert entspricht den wir haben möchten und nicht das zweite Token (bspw. das REG_SZ in der Ausgabe).


Als letztes möchte ich mich bei Euch für die permanente Unterstützung und Problemlösung hier im Forum bedanken was sicherlich zu kurz kommt!
Keine Ursache, machen wir doch gerne für wissbegierige ITler face-smile.
Mitglied: 132749
132749 03.06.2018 aktualisiert um 12:14:31 Uhr
Goto Top
Moin,

okay als Sprungmarke nicht verwertbar aber als "Platzhalter" könnte man das dann schon nutzen!?
Das Beispiel ist naklar blöd denn was sollte da schon stehen ausser DEU bei mir aber andere Pfade andere Platzhalter

Die /reg:32 gehört dann immer ans Ende!?

FOR /F "tokens=3 delims= " %%A IN ('REG QUERY "HKCU\Control Panel\International" /v sLanguage / reg:32') DO SET Language=%%A  

copy %drive%\myPfad\%Language%\*.* D:\myPfad\%Language%

Ich werde einfach mal ein bischen probieren und die Batch ohne @echo off nutzen um zu sehen ob ein Fehler ausgegeben wird wobei ich entsprechende pausen einarbeiten werde um zu sehen wo gearbeitet wurde oder nicht!

Nachtrag:
Wenn ich Dateien von A nach B verschiebe, kopiere, ect. habe ich die Möglichkeit mir das anzeigen zu lassen wie bei einem Fortschrittsbalken? Ich bin der Meinung, ich hätte das mal mit einem Pfeil >>>>>>>>>>> und einem Zähler gesehen!
Mitglied: 136166
136166 03.06.2018 aktualisiert um 12:19:21 Uhr
Goto Top
Zitat von @132749:

Moin,

okay als Sprungmarke nicht verwertbar aber als "Platzhalter" könnte man das dann schon nutzen!?
Kommt drauf an was du damit meinst, du kannst mit der Variablen natürlich Sprungmarken anspringen, nur eben die Marke selber kann nicht aus einer Variablen bestehen.
Die /reg:32 gehört dann immer ans Ende!?
Nein, muss halt nur innerhalb der einfachen Anführungszeichen in der Befehlskette stehen, ist ja klar wie sonst sollte die Batch den Parameter zum Befehl zuordnen ...


FOR /F "tokens=3 delims= " %%A IN ('REG QUERY "HKCU\Control Panel\International" /v sLanguage / reg:32') DO SET Language=%%A
Da darf kein Leerzeichen zwischen Slash und Parameter stehen

Nachtrag:
Wenn ich Dateien von A nach B verschiebe, kopiere, ect. habe ich die Möglichkeit mir das anzeigen zu lassen wie bei einem Fortschrittsbalken? Ich bin der Meinung, ich hätte das mal mit einem Pfeil >>>>>>>>>>> und einem Zähler gesehen!
--> Robocopy.