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:
@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-Key: 50282

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

Printed on: April 18, 2024 at 08:04 o'clock

Member: Biber
Biber Jan 30, 2007 at 21:16:41 (UTC)
Goto Top
Moin Dani,

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

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

HTH
Biber
Member: Dani
Dani Jan 30, 2007 at 21:32:18 (UTC)
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
Mitglied: 36539
36539 Jan 30, 2007 at 21:55:20 (UTC)
Goto Top
Es funktioniert alles bis auf die DO Anweisung in der IF - Anweisung!!

setzt mal die " bei do set "anweisung"

Matthias
Member: Dani
Dani Jan 30, 2007 at 22:06:56 (UTC)
Goto Top
Hi,
thx.....aber hat au nix geändert!!!


Gruß
Dani
Member: bastla
bastla Jan 31, 2007 at 00:30:21 (UTC)
Goto Top
Hallo Dani!

Und so?
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]
Member: SteinBeiser
SteinBeiser Jan 31, 2007 at 07:47:21 (UTC)
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 )
Member: bastla
bastla Jan 31, 2007 at 08:12:13 (UTC)
Goto Top
... aber:
Setlocal EnableDelayedExpansion
FOR /f %%b IN ('DIR C:\*.* /b /o-d') DO ( SET archiv=%%b  
Echo Variable Archiv ist !archiv!, %%b )

Grüße
bastla
Member: Biber
Biber Jan 31, 2007 at 10:27:14 (UTC)
Goto Top
Na ja, dann besser ganz auf die Zwischen-Variable %Archiv% verzichten.

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
Member: Dani
Dani Jan 31, 2007 at 16:58:57 (UTC)
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....".
FOR /f %%b IN ('DIR "%dir_des%\%name%*.rar" /b /o-d') DO (  
		SET archiv=%%b
		ECHO %archiv%
	)
Folgende Zeile bewirkt auch nichts!
Setlocal EnableDelayedExpansion
Member: Biber
Biber Jan 31, 2007 at 17:38:04 (UTC)
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.
....Setlocal EnableDelayedExpansion
FOR /f %%b IN ('DIR C:\*.* /b /o-d') DO SET archiv=%%b  
Echo Variable Archiv ist !archiv!
...

HTH Biber
Member: Dani
Dani Jan 31, 2007 at 17:46:09 (UTC)
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
Member: Biber
Biber Jan 31, 2007 at 18:03:43 (UTC)
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
Member: Dani
Dani Jan 31, 2007 at 18:08:29 (UTC)
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