amenne
Goto Top

Batch Variable wird falsch zugewiesen

irgendwie funktioniert der Befehl 'set' bei mir nicht richtig...

Woran kann das liegen? Der Befehl set scheint bei mir nicht richtig zu funktionieren. Ich habe folgendes Script geschrieben:
@echo off & setlocal
for /d %%v in ("I:\Pat_Dat\testtest\*.*") do (  
	pushd "%%v"  
	ECHO.working now in:
	ECHO.%%v
	for %%f in (*.*) do (
		:: Directory mit Namen der Größe anlegen und Datei hineinkopieren
		set  /a dateigroesse=%%~zf
		echo.Der richtige Wert von Dateigroesse ist %%~zf
		echo.Der erste Wert der Variablen dateigroesse ist %dateigroesse%
		set /a "dateigroesse=%dateigroesse% /1024"  
		echo.Der zweite Wert der Variablen dateigroesse ist %dateigroesse%
		if not exist "%dateigroesse%" md "%dateigroesse%"  
		xcopy %%f "%dateigroesse%"  
	)
	popd
)
Ziel: Dateien in einem Ordner nach der Größe in Unterordner sortieren. Klappt so auch, wenn ich die Berechnungen mit der Variablen dateigroesse weglasse. Nun sind aber die Dateien ein bisserl unterschiedlich groß, so dass ich sie nach ihrer KB-Größe, nicht nach den Bytes sortieren will. Deshalb die Berechnungen.

Problem: Die Ausgabe ist
Der richtige Wert von Dateigroesse ist 290314
Der erste Wert der Variablen dateigroesse ist 577
Der zweite Wert der Variablen dateigroesse ist 577

Erwarten würde ich aber sowas wie 290314, 290314, 280. In der Zeile "set /a dateigroesse=%%~zf" klappt offensichtlich die Zuweisung nicht...

Es scheint vielleicht damit zu tun zu haben, dass die cmd die variable dateigroesse nur einmal für die forschleife berechnet? Oder mit den zwei for-schleifen, die verboten sein sollen (hab ich mal irgendwo gelesen)? Aber es funktioniert ja ohne dateigroesse wunderbar...

Wie könnte ich es richtig machen?
Kommentar vom Moderator Biber am Apr 18, 2012 um 18:57:24 Uhr
Codeformatiert und verschoben von "Windows oder was" nach "Batch & Shell".

Content-Key: 183714

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

Printed on: May 6, 2024 at 03:05 o'clock

Member: ITSchlumpf
ITSchlumpf Apr 18, 2012 at 12:36:24 (UTC)
Goto Top
Hoi,

wieso "set /a"?
Lass mal das /a weg vll geht es dann?!

lg
Member: Skyemugen
Skyemugen Apr 18, 2012 at 12:43:40 (UTC)
Goto Top
Aloha, (Ja, wir begrüßen hier erst einmal!)

bevor ich wieder Augenschmerzen bekomme, nutze bitte unsere schöne ##blue|##-Formatierung.

So, nächster Punkt ist: nutze enabledelayedexpansion zusammen mit !Variable! oder rufe einen Unterprozess per call :Sprungmarke auf, denn set /a "dateigroesse=%dateigroesse% /1024" innerhalb der Schleife kann so nicht funktionieren.

greetz André (auch das gehört zum guten Ton!)

@it-schlumpf ... mal ernsthaft, wenn man keine Ahnung hat ...
Mitglied: 106009
106009 Apr 18, 2012 at 12:44:39 (UTC)
Goto Top
Für Codezeilen gibt es die

Für eine Begrüßung als Zeichen für eine ordentliche Erziehung gibt's Grußformeln. Die lauten nicht "Irgendwie" oder "Woran", sondern z. B. Hallo, Hi, Guten Tag oder ähnlich.
Member: amenne
amenne Apr 18, 2012 at 12:55:54 (UTC)
Goto Top
Hallo face-smile , Wollte halt sachlich bleiben, daher fehlten die Grüße. Ich hoffe, ihr verzeiht. face-wink

vielen Dank, skyemugen, für die schnelle Hilfe!! Habe mit das script jetzt mit enabledelayedexpansion und !Variable! wunderbar zum laufen gekriegt, funktioniert einwandfrei, bin ich froh. face-smile

1000 Dank und beste Grüße, AM face-smile