manu.miu
Goto Top

Variable in andere Variable innerhalb von Befehlsblöcken

Variablen Wert in einer Variable einfügen, jedoch befindet sich das Ganze innerhalb von einem for-Befehlsblock, sodass nur die erweiterte Variante mit den Ausrufezeichen-Variablen möglich ist.

Abend allerseits,

erstmal tschuldigung für die unlogische Überschrift. Mir ist aber leider nichts aussagekräftigeres eingefallen.
Ich habe nun schon Stunden damit verbracht das Internet und auch dieses Forum zu durchforsten, aber nie eine Lösung zu meinem Problem gefunden.
Eine kurze Beschreibung was ich überhaupt vorhabe:
Und zwar wird die Speicherkarte des Autoradios nur dann erkannt, wenn alle Songs auf der Karte keine Sonderzeichen oder ähnliches enthalten. D.h. ich will einen kleinen Skript basteln, den ich nach dem Kopieren von Songs auf die Speicherkarte ausführe und der mir dann alle Ordnernamen und Dateinamen auf Sonderzeichen durchsucht und falls vorhanden diese Zeichen löscht. Ja ich weiß, das ist keine Kleinigkeit!

Mein Ansatz bisher war die Ordner und Dateien über "dir" auslesen und dann per "for" die einzelnen Zeilen auswerten. Für die Auswertung lass ich die Zeichen zählen und möchte dann diese nacheinander in eine Variable speichern, von wo aus dann mit einer if-abfrage das Zeichen entweder zugelassen oder ersetzt wird. Ist der gesamte Name am Ende ungleich dem Ausgangszustand, wird der Ordner-/ Dateiname ersetzt. Hoffe das war jetzt nicht zu kompliziert/unverständlich ausgedrückt!
Mein Problem und zugleich die Frage an euch ist: Wie bekommt ich das jeweilige Zeichen in eine Variable (in meinem Code die Variable letters (der Fehler Zeile 15)).

Wäre euch sehr dankbar für alle noch so kleinen Denkansätze, die mich vorwärts bringen. Ihr könnt auch ganz andere Vorschläge bringen (z.B. wie ich es mit einer andern Sprache lösen kann, C++ oder so...).

Hier mein erster Versuch:

@echo off
setlocal EnableDelayedExpansion
cls

set dateiname=test.bat
set G=%temp%\GNO.vbs 
>%temp%\GNO.vbs echo Set rE=New RegExp:rE.Pattern=".":rE.Global=True:WScript.Echo rE.Execute(WScript.Arguments(0)).Count   

for /f "tokens=*" %%i in ('dir /B') do (  
	if not %%i==%dateiname% (
		for /f %%a in ('cscript //nologo %G% "%%i"') do (  
			for /l %%k in (1,1,%%a) do (
				set /a count=%%k - 1
				set filename=%%i
				set letters=!filename:~!count!,1!
				echo !letters!
			)
		)
	)
)

pause >nul
exit

So das wars...
schöner Abend noch,
Grüße Manu

Content-Key: 173657

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

Printed on: April 19, 2024 at 23:04 o'clock

Member: pieh-ejdsch
pieh-ejdsch Sep 25, 2011 at 22:26:18 (UTC)
Goto Top
moin Manu,

eine Variable mit offsets durchgehst Du mit
for /l %%k in (0,1,%%a) do if "!Letters:~%%k,1!" neq "" echo\!Letters:~%%k,1!  

derartigen Code fürs Umbenennen wegen Sonderzeichen gibts es Hier: Ersetzen von Zeichen in Datei- und Verzeichnisnamen in allen Unterordnern

Gruß Phil
Member: manu.miu
manu.miu Sep 26, 2011 at 20:08:35 (UTC)
Goto Top
servus Phil,

vielen Dank für Deine schnelle Antwort.
Hab wahrscheinlich wieder viel zu eingeschränkt gesucht face-sad *tomatenaufdenaugen*

Hab mit Deiner Hilfe das Problem gelöst. Und zwar stand die Startnummer der for-schleife bei mir auf "1" und nicht wie bei Dir auf "0".

Vielen Dank nochmals! face-wink

Bis dann, Gruß Manu

*Beitrag gelöst*