Hallo zusammen,
ich bin gerade dabei, eine Stapelverarbeitungsdatei neu zu gestalten.
Und zwar hatte ich bisher eine kleine Datei, die mir meine paar C-Files
compiliert, linkt, und ein Intel-Hex-File daraus macht, welches ich über
RS232 direkt auf einen µC lade.
Bisher hatte ich mal 3 oder 4 C-Files, die ich in der Stapelverarbeitung
einfach nur nacheinander compilierte, mit den angegebenen Dateinamen.
Da meine Projekte aber wachsen, und ich auch mal gerne 100 C-Files
compiliere, und die Sache dann schnell unübersichtlich wird, möchte ich
die Sache durch FOR-Schleifen, wo alle C-Files erfasst werden,
automatisieren. Dann brauche ich auch gar nicht mehr darauf zu achten,
ob irgend eine Datei mal fehlt.
Mit dem SDCC-Compiler funktioniert das schon mal prächtig:
1
cd %~d0%~p0
2
3
for %%d in (*.c) do (
4
echo %%d
5
sdcc %CParmString% %%d
6
if ERRORLEVEL 1 goto ende
7
)
Danach sind alle C-Files compiliert.
CParmString ist eine Umgebungsvariable, die mehrere Compileroptionen
enthält. %%d ist der Dateiname.
Es werden da neben Listing und weiteren Files u.a. rel-Files erzeugt,
die der Linker als File-String, der alle rel-Files enthält, wieder
benötigt. Die Automatisierung, Erstellung eines File-Strings in einer
Umgebungsvariablen, funktioniert jedoch keineswegs:
1
set RelFileString=main.rel
2
3
for %%d in (*.rel) do (
4
if not %%d==main.rel (
5
set RelFileString=%RelFileString% %%d
6
)
7
)
8
9
echo RelFileString: %RelFileString%
RelFileString ist eine Umgebungsvariable, in der als String alle
rel-Files nacheinander enthalten sein sollen. Die Namen sind jeweils
durch ein Leerzeichen voneinander getrennt. Als erstes main.rel, deshalb
setzte ich das schon vor der FOR-Schleife. Der String wird als Parameter
an den Linker übergeben.
In der Eingabeaufforderung, das ist sowas wie ein DOS-Fenster in Vista,
kann man folgende Befehle zum Erhalten eines Hilfetextes eingeben:
Help for
Help set
Help if
Es erscheinen auch sehr umfangreiche Beschreibungen. Aber ich habe mir
da jetzt schon 2 Tage lang die Augen ausgeschaut, verschiedenes
probiert, und ich komme auf keinen grünen Zweig.
Die Stringzuweisungen in der FOR-Schleife funktionieren einfach nicht.
Mit
1
set RelFileString=%RelFileString% %%d
soll der String um eine Datei erweitert werden. Aber es funktioniert
einfach nicht.
Was mache ich falsch?
Ich bin für jede Hilfe dankbar.
Diese BAT-Dateien sind Schrott. Ich hab gerade ne Dreiviertelstunde
probiert (unter XP), geht nicht, egal was man probiert es kommt nur
Schrott (oder überhaupt nichts) raus.
Muss es eine BAT-Datei sein?
Anbei mal ein paar Zeilen Perl, das geht prima. Ein Profi schaffts
vermutlich in einer Zeile, ich bin Anfänger.
1
use strict;
2
use warnings;
3
4
use Cwd;
5
6
opendir(DIR, getcwd());
7
my @f=readdir(DIR);
8
9
my $vars="main.rel";
10
foreach (@f)
11
{
12
$vars.= " $_" if(m/.rel$/ && not m/^main.rel$/);
13
}
14
print $vars;
Der Rest dürfte auch nicht komplizierter sein, man kann ja auch einen
Mix Perlskripte+BAT-Datei machen.
mit set /? gibts hilfe zu
Delayed environment variable expansion
ich habs nur in english
oder
http://www.robvanderwoude.com/variableexpansion.php
das geht bei mir:
*******************************************************
SETLOCAL ENABLEDELAYEDEXPANSION
set RelFileString=main.rel
for %%d in (*.rel) do (
if not %%d==main.rel (
set RelFileString=!RelFileString! %%d
)
)
echo RelFileString: %RelFileString%
pause
*******************************************************
Abgesehen vom Sinn oder Unsinn, sich heute noch mit den
Windows/Dos-Batchdateien herumzuschlagen, die bei ihrer Einführung schon
sowas von tot waren:
Makefiles sind schon erfunden.
Ansonsten empfehle ich dir dringend, eine ordentliche Shell zu benutzen,
etwa MinGW. Dort hast du dann auch einen brauchbaren und flexiblen
Kommandointerpreter. Und vorallem Werkzeuge.
Eine ordentliche Shell bringt Windows 7 bereits mit. Die heißt
Powershell und ist sehr mächtig.
Starte mal Windows Powershell ISE und schau in die Hilfe rein (F1).
miks schrieb:> SETLOCAL ENABLEDELAYEDEXPANSION
Vielen vielen Dank!
Du bist heute der Held des Tages, das ist eine ganz kurze und
schmerzfreie Lösung!
In der Batch-Datei habe ich noch 2 weitere FOR-Schleifen, es klappt
alles vorzüglich.
In den Help-Dateien steht natürlich was von der Befehlserweiterung, aber
leider nicht so genau, wie man sie anwendet, daß man SETLOCAL verwenden
muß. Nachdem ich das jetzt weiß, hab ich mit Help SETLOCAL auch die
genaue Beschreibung gefunden. Da fehlen irgendwie ein paar Querverweise,
und wenn man es nicht weiß?
Übrigens arbeite ich schon seit Jahren gerne mit diesen Stapeldateien.
Die machten auf einfache Weise immer genau das, was ich wollte. Jedoch
habe ich mich darin nie extrem vertieft. Mit den Ausrufezeichen anstatt
Prozentzeichen experimentierte ich gestern auch noch, aber das klappte
natürlich nicht, weil ich den SETLOCAL-Befehl noch nicht hatte.
"Gast" schrieb:> Anbei mal ein paar Zeilen Perl, das geht prima.
Vielen Dank auch für diese Anregung, mal ne neue Programmiersprache zu
aktuellen Dingen wäre auch nicht schlecht. Ich werde mal nach Perl im
Internet suchen.
Sven P. schrieb:> Makefiles sind schon erfunden.
Genau das wird es sein, was man unter C-Programmierung braucht. Danach
suchte ich bereits mal vergangene Woche, gute Tutorials, da ist mir
leider noch nichts gut verständliches begegnet.
Platinenschwenker .. schrieb:> Starte mal Windows Powershell
Sorry, ich habe noch Vista. Die Suche nach dem Begriff auf meinem
Rechner verlief auch ergebnislos.
Ich wünsche euch allen Frohe Ostern!
Christian R. schrieb:> Powershell gibts natürlich auch für Vista, ist wirklich sehr gut> gemacht.> http://www.microsoft.com/downloads/de-de/details.aspx?FamilyID=C6EF4735-C7DE-46A2-997A-EA58FDFCBA63
Christian, sehr nett, aber ich kann da gar nichts machen. Ich hab ja den
Link mal geöffnet.
Bekomme da folgenden Text:
1.Klicken Sie im oberen Seitenbereich auf die Schaltfläche Download, um
den Download zu starten, oder wählen Sie aus der Dropdownliste Sprache
ändern eine andere Sprache aus, und klicken Sie auf Ändern.
Klicken Sie zur sofortigen Installation auf Ausführen.
Klicken Sie auf Speichern, um den Download für eine spätere Installation
zu speichern.
Es gibt da weder eine Schaltfläche Download, noch Ausführen, noch
speichern. Ich komme mir da im Augenblick saublöd vor, wirklich.
Irgendwie ist die Seite kaputt, oder für mich nicht verfügbar.
Liegt vermutlich an der 'Gültigkeitsprüfung'.
> Das Tool erfasst Informationen über die Hardware und Software Ihres> Computers, um zu ermitteln, ob es sich bei Ihrer Windows-Installation> um ein Original handelt [...]
Lachhaft.
Mit welchem Browser hast dus versucht Wilhelm? Bei mir geht der Link
Problem los unter firefox und IE @ Win7.
Die PowerShell is scho a gwandte Sach ;)
Gibts in Version 1.0 und 2.0 für XP bis Win7. google einfach manuell
nach PowerShell 2.0, gibts auch bei CHIP und Konsorten zum Download.
Edit: P.S. Bei Win7 ist die PowerShell 2.0 von Haus aus dabei, also
falls du mal ein Upgrade von Vista in Erwägung ziehst ;)
D. I. schrieb:> Mit welchem Browser hast dus versucht Wilhelm? Bei mir geht der Link> Problem los unter firefox und IE @ Win7.
Ja selbstverständlich sollte es mit dem neuen IE9 auch gehen. Und was
anderes an Internetexplorer kommt hier auf meinen Rechner auch nicht
drauf. Der sollte doch mit Microsoft harmonieren, wenn man eine
Microsoft-Seite besucht.
Und mein Rechner ist Ende 2009 bei Medion mit Vorinstallation Vista 32
Bit-Version ganz legal gekauft, mit Raubtieren und Klauteilen hab ich es
nicht so.
Wenn nichts geht: Ich hatte ja bereits weiter oben allen frohe Ostern
gewünscht. Möchte endlich mit meinen µCs und deren Programmierung
beginnen, nicht ständig neue Fässer aufmachen. Das ist wie Hürdenlauf,
bremst bei jeder Hürde.
Christian R. schrieb:> http://www.microsoft.com/downloads/de-de/details.a...
Christian, das ist ja interessant: Vom Platinenschwenker bekomme ich den
Link angeboten:
> http://www.microsoft.com/downloads/de-de/details.a...
Die beiden Seiten sehen fast haargenau gleich aus. Nur, neben dem
Dateinamen, gibt es jetzt noch einen Download-Button.
Im übrigen ist der IE9 noch Scheiße. Vielleicht schieben sie noch
Updates nach zur Verbesserung. Dateidownloadgrößen und einen
Fortschrittsbalken sieht man gar nicht mehr wie noch im IE8. Bin das
Ding gerade am herunterladen. Dateiendung *.msu. Hoffentlich weiß
Windows anschließend was damit anzufangen.
Wilhelm Ferkes schrieb:> Im übrigen ist der IE9 noch Scheiße. Vielleicht schieben sie noch> Updates nach zur Verbesserung. Dateidownloadgrößen und einen> Fortschrittsbalken sieht man gar nicht mehr wie noch im IE8.
befor du so ein unsinn schreibst solltest du etwas genauer hinsehen, es
gibt jetzt den Downloadmanger und das sieht man alles was man so
braucht.
(OK den Balken gibt es nicht, aber die größe und die Zeit steht da)
Ist ja ulkig. Ich hab eben mal meinen Link von oben im IE9 (unter
Windows 7) geöffnet. Da kommt die Seite von Windows Powershell 1.0 für
Windows Vista. Da ist ein Button Weiter, dann kommt die
Gültigkeitsprüfung, da muss man in der Pop-Up Leiste (neuerdings am
unteren Bildschirmrand) bestätigen, dass man das PlugIn laden will, und
wenn das durch ist, kommt eine Seite, auf der Download steht und man das
Dig herunter laden kann.
Aber wenn es jetzt auch bei dir lädt ist doch OK. *.msu sind Windows
Updates als ausführbares File. Denn die PowerShell gibts eigentlich als
optionales Download im Windows Update.
Peter II schrieb:> befor du so ein unsinn schreibst solltest du etwas genauer hinsehen, es> gibt jetzt den Downloadmanger und das sieht man alles was man so> braucht.> (OK den Balken gibt es nicht, aber die größe und die Zeit steht da)
Ich schreibe keinen Unsinn. Der Downloadmanager erscheint jetzt ganz
spartanisch nur noch in einem kleinen Fenster. Und ich möchte wissen,
was und wieviel ich downloade. Mein monatlicher Account für die
Monatsflat hat nur 5GB. Und man mag es glauben oder nicht, da ist man
bei allem Overhead von Webseiten heute schnell und zügig dabei. Die
Größe der Downloaddatei steht bei mir übrigens nirgendwo. Nur die
Prozente und die Restzeit.
Christian R. schrieb:> *.msu sind Windows> Updates als ausführbares File. Denn die PowerShell gibts eigentlich als> optionales Download im Windows Update.
Es hat mich eigentlich auch schon gewundert, dass Wilhelm die PS
(PowerShell) nicht bereits auf seinem Vista hat. Es wäre dann
wahrscheinlich doch einfacher die PS als Upate einzuspielen, als sie
separat zu installieren. Bei den von mir geposteten Links ist soweit ich
sehe keine Gültigkeitsprüfung vorhanden (jedenfalls für den Download).
Wilhelm Ferkes schrieb:> Der Downloadmanager erscheint jetzt ganz> spartanisch nur noch in einem kleinen Fenster.
also mein Fenster ist so gross wie ich es will.
Wilhelm Ferkes schrieb:> Genau das wird es sein, was man unter C-Programmierung braucht. Danach> suchte ich bereits mal vergangene Woche, gute Tutorials, da ist mir> leider noch nichts gut verständliches begegnet.
Nimm eine existene Makefile, z.B. die von WinAVR oder so; die Syntax ist
weitestgehend selbsterklärend.
Platinenschwenker .. schrieb:> Denke dran, Vista braucht das Servicepack für die PS!
Hilfe! Auch das noch!
Meine eigentliche Arbeit mit IDE, Compiler und µCs an der RS232 gelangt
wohl auf die Wunschliste, für irgendwann mal, nebenbei. ;-)
Wilhelm Ferkes schrieb:> Hilfe! Auch das noch!
naja das gibt es seit 2Jahren, das sollte jeder Mittlerweile schon drauf
haben, selbst MS hat den Support für Vista ohne SP schon abgekündigt.
Wilhelm Ferkes schrieb:> Platinenschwenker .. schrieb:>>> Denke dran, Vista braucht das Servicepack für die PS!>> Hilfe! Auch das noch!
Ja! Denn lies
Systemanforderungen (Powsershell 2.0 für Vista)
Unterstützte Betriebssysteme:Windows Vista Service Pack 1;Windows
Vista Service Pack 2
> Meine eigentliche Arbeit mit IDE, Compiler und µCs an der RS232 gelangt> wohl auf die Wunschliste, für irgendwann mal, nebenbei. ;-)
I wo, so ein Servicepack (SP; mittlerweile SP2!) mag generell etwas
größer sein, ist aber i.d.R. in ein paar Minuten eingespielt. Ein SP
liefert auch immer massig Sicherheitsupdates, das sollte man schon
deshalb installieren.
Dann man los! :-)
Übrigens für Windows 7 gibt es auch bereits (seit 4. April 2011) ein
Servicepack SP1. Das habe ich gerade bemerkt. ;)
Platinenschwenker .. schrieb:> Übrigens für Windows 7 gibt es auch bereits (seit 4. April 2011) ein> Servicepack SP1. Das habe ich gerade bemerkt. ;)
Hm, das gibts sogar schon seit dem 22. Febraur im Windows Update. ;)