dani
Goto Top

Batch - Variable wird nicht gesetzt

Guten Abend alle miteinander,

ich habe ein kl. Problem mit einer Variablen in einer Schleife. Und zwar wird dieser Varible kein Wert zugewiesen, obwohl einer in %%b drin steht!
Hier mal mein Script:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@ECHO off & setlocal

::Variablen
SET nr=0
SET nr_full=4

SET dir_src=C:\WINDOWS\SYSVOL
SET dir_des=K:\Daten

SET name=NETLOGON


::Überprüft, ob die Datei vorhanden ist
FOR /l %%a IN (%nr_full%,-1,1) DO ( 
	IF NOT EXIST "%dir_des%\%name%%%a.rar" SET nr=%%a  
)

::Wenn 0, dann lege neues Archiv an.
IF "%nr%" == "0" (  
	FOR /f %%b IN ('DIR "%dir_des%\%name%*.rar" /b /o-d') DO SET archiv=%%b  
	Echo Variable Archiv ist %archiv%

	::DEL "%dir_des%\%archiv%" 
	::rar.exe a -m5 -y "%dir_des%\%archiv%" "%dir_src%" 
) ELSE (
	rar.exe a -m5 -y "%dir_des%\%name%%nr%.rar" "%dir_src%"  
)

pause
Es funktioniert alles bis auf die DO Anweisung in der IF - Anweisung!! Jemand eine Idee???


Gruß
Dani

Content-ID: 50282

Url: https://administrator.de/forum/batch-variable-wird-nicht-gesetzt-50282.html

Ausgedruckt am: 10.04.2025 um 21:04 Uhr

Biber
Biber 30.01.2007 um 22:16:41 Uhr
Goto Top
Moin Dani,

fehlt nicht nach %name% im String "%dir_des%\%name%*.rar" ein Backslash?

So: "%dir_des%\%name%\*.rar" ??

HTH
Biber
Dani
Dani 30.01.2007 um 22:32:18 Uhr
Goto Top
Hi,
Leider nicht!! War zuerst auch mein Gedanke.

Denn in dem Ordner K:\Daten liegen verschiedene Archive. Es soll aber nur die betreffen die mit %name% anfangen!! Verstehst was ich meine?!


Gruß
Dani
36539
36539 30.01.2007 um 22:55:20 Uhr
Goto Top
Es funktioniert alles bis auf die DO Anweisung in der IF - Anweisung!!

setzt mal die " bei do set "anweisung"

Matthias
Dani
Dani 30.01.2007 um 23:06:56 Uhr
Goto Top
Hi,
thx.....aber hat au nix geändert!!!


Gruß
Dani
bastla
bastla 31.01.2007 um 01:30:21 Uhr
Goto Top
Hallo Dani!

Und so?
1
2
3
4
5
6
7
8
9
10
11
IF "%nr%" == "0" (  
    FOR /f %%b IN ('DIR "%dir_des%\%name%*.rar" /b /o-d') DO <b>(</b>  
    SET archiv=%%b
    Echo Variable Archiv ist %archiv%

    ::DEL "%dir_des%\%archiv%" 
    ::rar.exe a -m5 -y "%dir_des%\%archiv%" "%dir_src%" 
    <b>)</b>
) ELSE (
    rar.exe a -m5 -y "%dir_des%\%name%%nr%.rar" "%dir_src%"  
)

Grüße
bastla

[Edit] War schon etwas zu spät ... siehe daher besser unten [/Edit]
SteinBeiser
SteinBeiser 31.01.2007 um 08:47:21 Uhr
Goto Top
SET archiv=%%b in ner FOR schleife bekommt immer den letzten wert
zum veranschaulichen:
FOR /f %%b IN ('DIR "C:\*.*" /b /o-d') DO ( SET archiv=%%b
Echo Variable Archiv ist %archiv%, %%b )
bastla
bastla 31.01.2007 um 09:12:13 Uhr
Goto Top
... aber:
1
2
3
Setlocal EnableDelayedExpansion
FOR /f %%b IN ('DIR C:\*.* /b /o-d') DO ( SET archiv=%%b  
Echo Variable Archiv ist !archiv!, %%b )

Grüße
bastla
Biber
Biber 31.01.2007 um 11:27:14 Uhr
Goto Top
Na ja, dann besser ganz auf die Zwischen-Variable %Archiv% verzichten.

1
2
3
4
5
6
7
8
9
10
11
IF "%nr%" == "0" (  
    FOR /f %%b IN ('DIR "%dir_des%\%name%*.rar" /b /o-d') DO (  
    
    Echo Variable Archiv ist %%b

    ::DEL "%dir_des%\%%b"  
    ::rar.exe a -m5 -y "%dir_des%\%%b" "%dir_src%"  
    )
) ELSE (
    rar.exe a -m5 -y "%dir_des%\%name%%nr%.rar" "%dir_src%"  
)

HTH
Biber
Dani
Dani 31.01.2007 um 17:58:57 Uhr
Goto Top
Hi @all,

@Biber
Naja...dann überschreibt er mir doch alle Archive. Es soll aber immer nur das Älteste ersetzt werden.

@bastla
Folgender Code bringt nur "ECHO ist....".
1
2
3
4
FOR /f %%b IN ('DIR "%dir_des%\%name%*.rar" /b /o-d') DO (  
		SET archiv=%%b
		ECHO %archiv%
	)
Folgende Zeile bewirkt auch nichts!
1
Setlocal EnableDelayedExpansion
Biber
Biber 31.01.2007 um 18:38:04 Uhr
Goto Top
Sorry, Dani,

hast natürlich Recht.

bastla's Ansatz ist aber der Richtigere, nur die Klammer ist an der falschen Stelle bzw. überflüssig.
1
2
3
4
....Setlocal EnableDelayedExpansion
FOR /f %%b IN ('DIR C:\*.* /b /o-d') DO SET archiv=%%b  
Echo Variable Archiv ist !archiv!
...

HTH Biber
Dani
Dani 31.01.2007 um 18:46:09 Uhr
Goto Top
Hi,
das mit den "!" funktioniert wirklich...THX face-smile

Jetzt würde mich schon interessieren, warum das so geht und mit "%" nicht?!
Weil ich habe andere Batchjobs mit dem gleichen Aufbau und dort geht es mit "%"!


Gruß
Dani
Biber
Biber 31.01.2007 um 19:03:43 Uhr
Goto Top
weil alles innerhalb der "IF.... ( ) ELSE (...)"-Anweisung für den CMD-Interpreter EINE Zeile, EINE Anweisung ist.
Und deshalb werden die Variablen EINmal aufgelöst.
Es sei denn, Du sagst ausdrücklich mit DelayedExpansion, dass Du es anders willst.

Biber
Dani
Dani 31.01.2007 um 19:08:29 Uhr
Goto Top
Hi,
ist irgendwie schon komisch. Der Batch läuft unter WindowsXP einwandfrei. Bloß bei 2003 zickt er rum.
Dann weiß ich das für die Zukunft auch! Schönen Abend wünsch ich dir...


Gruß
Dani