Jump to content

Windows 7 - String der Variable einer FOR Schleife ändern


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Geschrieben

Hallo,

 

ich habe folgendes Script:

@echo off
for /F "tokens=*" %%i in (c:\list.txt) do (
echo %%i
set NEWi=%%i: =.%"
echo %NEWi%
)

Die list.txt enthält:

Max Moritz
Müller Milch

Nun möchte ich zwischen dem VOrnamen und Nachnamen das Leerzeichen durch einen Punkt ersetzen...schaffe es aber nicht, wie ihr euch denken könnte. Kann mir Jemand helfen?

Geschrieben

Danke, aber Power Shell möchte ich nicht.

 

So...eine Lösung habe ich gefunden, allerdings nicht den Sinn verstanden:

 

@echo off & setLocal EnableDelayedExpansion

set str=joe smith

echo !str!

 

for /f "tokens=1-2 delims= " %%a in ("!str!") do (

set var=%%a.%%b

)

echo !var!

Wofür stehen denn die Ausrufezeichen?

Geschrieben (bearbeitet)

Da hst Du recht, die Schleife wird zwar zweimal abgearbeitet, der Rest aber nur einmal.

 

Ich schau mal.

 

Ob es so hilft?

 

for /F "tokens=*" %%i in (List.txt) do Call :work %%i

pause

:work
set var=%1.%2
echo %var%
goto :eof

 

Eine Abwandlung:

 

for /F "tokens=*" %%i in (List.txt) do set var=%%i & Call :work

pause
:work

echo %var%
set var=%var: =.%
echo %var%
set var=%var:~0,-1%
echo %var%
pause
goto :eof

bearbeitet von lefg
Geschrieben
Danke, aber Power Shell möchte ich nicht.

 

So...eine Lösung habe ich gefunden, allerdings nicht den Sinn verstanden:

 

 

Wofür stehen denn die Ausrufezeichen?

 

Die Ausrufezeichen verwendet man, um die "Delayed" Variablen auszugeben. Durch dieses "EnableDelayedExpansion" wird der Interpreter angewiesen, Variablenzuweisungen auch innerhalb von Funktionsblöcken (IF, DO...) auszuwerten.

 

Einfach mal danach googlen. Hier ist z.B. ne ganz nette Erläuterung: Environment variable expansion occurs when the command is read - The Old New Thing - Site Home - MSDN Blogs

 

EDIT: Übrigens müsste m.E. das "echo !var!" innerhalb des DO (also ÜBER der Klammer) stehen.

Geschrieben (bearbeitet)
setLocal EnableDelayedExpansion

for /f "tokens=*" %%i in (List.txt) do (
set var=%%i
echo %var% ; bringt die Variable nicht zur Anzeige
echo !var! ; bringt die Variable zur Anzeige
set var=!var: =.!
echo !var!
)
Endlocal
pause

bearbeitet von lefg
  • 1 Monat später...
Geschrieben

Vielen Dank für euere Bemühungen. Ich denke, dass ich es so weit verstanden habe.

Mein Script sieht nun etwas anders aus. Ich habe den Punkt in die Namen anderweitig reingebracht.

 

for /F "tokens=1-2 delims= " %%a in (c:\list.txt) do (
echo %%a.%%b
pause
echo %%a %%b
pause
)
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...