Forum: PC-Programmierung Windows Vista und Stapelverarbeitung (BAT-Datei)


von Wilhelm F. (Gast)


Lesenswert?

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.

von "Gast" (Gast)


Lesenswert?

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.

von miks (Gast)


Lesenswert?

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
*******************************************************

von Sven P. (Gast)


Lesenswert?

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.

von Platinenschwenker .. (platinenschwenker)


Lesenswert?

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).

von Wilhelm F. (Gast)


Lesenswert?

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!

von Christian R. (supachris)


Lesenswert?

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

von Wilhelm F. (Gast)


Lesenswert?

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.

von Sven P. (Gast)


Lesenswert?

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.

von D. I. (Gast)


Lesenswert?

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 ;)

von Wilhelm F. (Gast)


Lesenswert?

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.

von Platinenschwenker .. (platinenschwenker)


Lesenswert?

Wilhelm Ferkes schrieb:
> 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!

Für Vista gibt es die Powershell 2.0 hier

32-bit
http://www.microsoft.com/downloads/de-de/details.aspx?FamilyID=f2fa1227-9a34-4e29-aa03-62f5c00e16f2

64-bit
http://www.microsoft.com/downloads/de-de/details.aspx?FamilyID=0f73efa2-f8d6-45f3-a8f8-5cdc205b119a

Und dann liest du am besten mal kurz hier
http://www.microsoft-press.de/productinfo.asp?replace=false&cnt=productinfo&mode=2&type=2&id=ms-5667&index=2&nr=0&sid=9fb96ea51790ccdf5bc0f23744013a40

Verwende besser für den Anfang die Powershell ISE. Das ist die 
intergrierte Skriptumgebung.

Achso ja, dir auch FROHE OSTERN! ;)

von Wilhelm F. (Gast)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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)

von Platinenschwenker .. (platinenschwenker)


Lesenswert?

Wilhelm Ferkes schrieb:

> Dateiendung *.msu. Hoffentlich weiß
> Windows anschließend was damit anzufangen.

Sind Microsoft Windows Updatedateien für Vista. Näheres dazu auch hier

http://support.microsoft.com/kb/934307/de

von Christian R. (supachris)


Lesenswert?

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.

von Wilhelm F. (Gast)


Lesenswert?

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.

von Platinenschwenker .. (platinenschwenker)


Lesenswert?

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).

von Peter II (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Lukas K. (carrotindustries)


Lesenswert?

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.

von Platinenschwenker .. (platinenschwenker)


Lesenswert?

@ Wilhelm Ferkes

Denke dran, Vista braucht das Servicepack für die PS!

von Wilhelm F. (Gast)


Lesenswert?

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. ;-)

von Peter II (Gast)


Lesenswert?

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.

von Platinenschwenker .. (platinenschwenker)


Lesenswert?

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. ;)

von Christian R. (supachris)


Lesenswert?

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. ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.