Dieser Beitrag ist schon älter. Bitte vergewissern Sie sich, dass die Rahmenbedingungen oder der enthaltene Lösungsvorschlag noch dem aktuellen Stand der Technik entspricht.

Problem mit Windows Batch Script

Mitglied: swissgregi

Eine Variable kann innerhalb eienr For Schleife nicht ausgelesen werden.

Ich habe da ein Problem mit einer simplen Batch datei.

set /A zaehler=0
for %%f in (C:\ordner\*.JPG) do (
set /A zaehler=zaehler+1
echo %zaehler%
)
echo %zaehler%



Wieso wird ist die Variable %zaehler% innerhalb der For-Schleife "0"?
Nach der For Schleife kann Sie ausgelesen werden.
Kommentar vom Moderator Biber am 04.01.2011 um 17:59:32 Uhr
Verschoben von "Tools & Utilities" nach "Batch & Schnelles".

Content-Key: 158004

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

Ausgedruckt am: 16.10.2021 um 21:10 Uhr

Mitglied: Christian25
Christian25 04.01.2011 um 17:00:21 Uhr
Goto Top
set zaehler=0
for %%f in (C:\ordner\*.JPG) do (
set /A zaehler=%zaehler%+1
echo %zaehler%
)
echo %zaehler%

is ungetestet aber sollte gehen
/a nur beim rechnen...
Mitglied: bastla
bastla 04.01.2011 um 17:08:19 Uhr
Goto Top
Hallo swissgregi und willkommen im Forum!
Wieso wird ist die Variable %zaehler% innerhalb der For-Schleife "0"?
Weil bei Schleifen (sind für den Interpreter eine einzige Zeile) defaultmäßig die Werte der Variablen nur zu Beginn ermittelt bzw "erweitert" werden (der Wert kann, wie Dein Beispiel ja zeigt, zwar innerhalb der Schleife verändert werden, das Ergebnis wird aber erst nach der Schleife wieder "gelesen") - um das zu ändern, entweder "delayedExpansion" oder ein Unterprogramm verwenden - ungetestetes Beispiel für erstere Version:
@Christian25
/a nur beim rechnen...
Was soll daran Schlimmes sein, wenn eine Variable ihren (numerischen) Wert per "set /a" zugewiesen erhält? Betrachte es als Berechnung, bei der eine Konstante mit keinem weiteren Wert "verrechnet" wird ... ;-) face-wink

Grüße
bastla
Mitglied: swissgregi
swissgregi 04.01.2011 um 17:31:56 Uhr
Goto Top
Hallo Bastla,

besten Dank für Deine Hilfe.

Leider funktioniert das nicht. Ich habe hier mal das "Original" Skript:


Ziel des Skriptes ist, ein Ordner nach Bildern zu durchsuchen. Immer 3 Bilder zusammen sollen an das Programm "Enfuse" mittels Parameter übergeben werden.
Den Zähler habe ich, damit ich immer drei Dateien herauslesen kann, und danach den Zähler wieder zurück setzen kann.

Gibt es da eine bessere Lösung?
Mitglied: Arano
Arano 04.01.2011 um 18:02:26 Uhr
Goto Top
Hi,

sieht dir noch mal Bastla's Batch an !
Die Variablen, dessen Werte sich dynamisch ändern, müssen in Ausrufezeichen (!) anstelle der Prozentzeichen (%) geschrieben werden.

Ups... da stand noch etwas Text unter dem Batch...

Aber das "start enfuse..." sollte noch in den Anweisungsblock der dritten IF-Anweisung, damit dieses auch nur aufgerufen wird wenn es der dritte Schleifendurchlauf ist und nicht bei jedem einzelnem (zudem noch mit falschen Parametern)

~Arano
Mitglied: Biber
Biber 04.01.2011 um 18:09:00 Uhr
Goto Top
Moin swissgregi,

willkommen im Forum.
Die Mimik mit "erweiterter Variablenauflösung", neudeutsch "delayed expansion" ist zweistufig.
a) die Ankündigung "ich will es nutzen, ermögliche es mir" = Direktive "SetLocal EnableDelayedExpansion"
b) die explizite Kennzeichnung derjenigen Variablen, die du "verzögert", erst im allerletzten Moment, "auflösen" bzw wertmäßig ermitteln willst durch die Schreibweise !variable! statt %variable%

In deinem Fall musst du dann also, wenn du innerhalb einer [FOR-]Anweisung eine Variable SETtest und deren neu gesetzten Wert verwenden willst, in den IF-Prüfungen jeweils "IF !zaehler1!==1" etc, schreiben statt "IF %zaehler1%==1" und im "Start enfuse"-Aufruf auch !dat1!, !dat2!, !dat3! statt %dat1%, %dat2%, dat3%.

Siehe auch in bastlas Beispiel.

Gibt es da eine bessere Lösung?
Besser als in diesem Forum? Gibt es billigere Optiker als Fielmann? Ist der Papst geschieden?

Grüße
Biber
Mitglied: Christian25
Christian25 04.01.2011 um 18:57:52 Uhr
Goto Top
wurde mir mal so beigebracht...
Mitglied: 60730
60730 05.01.2011 um 01:05:25 Uhr
Goto Top
Moin,

Zitat von @Christian25:
/a nur beim rechnen...
wurde mir mal so beigebracht...

[1/2 OT]
mal ein kleines Demo am Prompt das Zeichen _ ist der Cursor (also ein Leerzeichen) und kein Unterstrich

zum Gegenbeweis mit /a
Von daher ;-) face-wink
[/1/2 OT]

Gibt es da eine bessere Lösung?
Möglicherweise "besser" aber für "bessere" Lösungen komplett andere Ansätze für mich schon zu spät am Abend....

Gruß
Mitglied: pieh-ejdsch
pieh-ejdsch 05.01.2011 um 22:45:07 Uhr
Goto Top
moin swissgregi,

Leider funktioniert das nicht. Ich habe hier mal das "Original" Skript:
Da ist ja auch eine Schliessende Klammer in Zeile 16 zuviel (welche aber nicht zum Scriptabbruch führen dürfte)
wenn Du einen Pfad zu einer Ausfürbaren Datei in die UmgebungsVariable PATH aufnimmst - wird das Programm gefunden und ausgefüht

soll der Batch nur bei jeder einzelnen Ausführung die 3 Dateien Übergeben (gehe ich mal davon aus)
dann in etwa so

[Edit]
wenn die *.jpg's beim bearbeiten mit dem Programm NICHT verschoben oder NICHT gelöscht werden, musst Du mit einer Art Liste arbeiten.
oder
die *.jgs's danach aus diesem Ordner herauslösen - wobei da der Befehl start enfuse.exe entweder als start /w ... oder ohne Start durchgefüht werden sollte.
- "usebackq" aus der 2. Forschleife entfernt
und willkommen im Forum
[/Edit]

Gruß Phil
Heiß diskutierte Beiträge
question
Achtung VMware, Inc. - SCSIAdapter - 1.3.18.0 virtuelle Server starten nicht mehrBl0ckS1z3Vor 1 TagFrageWindows Server5 Kommentare

Hallo Admins, ich habe heute über das VMware, Inc. - SCSIAdapter - 1.3.18.0 Treiberupdate aus den Windows Updates auf einem virtuellen Server Windows 2012 R2 ...

question
WIN 10 pro for workstations - Was genau ist das?toddehbVor 1 TagFrageWindows 1017 Kommentare

Hi, bin das erste mal über einen PC mit Win 10 Pro for workstations gestolpert und frage mich, was an dieser Edition anders ist, als ...

report
Ist FSLogix das Gelbe vom Ei?dertowaVor 1 TagErfahrungsberichtWindows Userverwaltung9 Kommentare

Hallo allerseits, ich habe mich die letzten Tage eingehend mit FSLogix in meinem Lab befasst und bin noch ein wenig zweigeteilter Meinung. Aktuell produktiv im ...

question
Hotel - Gast WLAN - Hotspot Aufbau und Sicherheit-Haftungaif-getVor 1 TagFrageLAN, WAN, Wireless12 Kommentare

Hallo zusammen, ich würde gerne bei einem Bekannten, der ein kleines Hotel (30 Zimmer - 3 Unify APs) besitzt ein Gäste WLAN aufsetzen, möglichst mit ...

question
VOIP BasisstationWolf6660Vor 1 TagFragePeripheriegeräte18 Kommentare

Hi, ich will meine FritzBox gegen einen MikroTik RB4011iGS+5HacQ2HnD-IN austauschen. Nun benötige ich aber einen VOIP Basisstation. Natürlich könnte ich meine 7590 dazu benutzten aber ...

question
Portbasierten vLans als Ersatz von unabhängigen Switches gelöst cheechybaVor 1 TagFrageNetzwerkmanagement10 Kommentare

Guten Tag liebe Community, im Anhang habe ich eine einfach Skizze angefügt um folgende Idee zu diskutieren und um Hilfe bei der Umsetzung zu bitten. ...

question
CAD Mobil in rauer Umgebunggansa28Vor 1 TagFrageHardware4 Kommentare

Hallo zusammen, Zu meinem Problem: Mein Schwieger Vater bekommt in seinem Metall Produzierenden Gewerbe zwei neue CAD Arbeitsplätze die eine recht hohe Hardware Anforderung haben, ...

general
Automatische Dokumentation von Vorgängen mit Kamerapassy951Vor 1 TagAllgemeinSonstige Systeme6 Kommentare

Hallo zusammen, ich wende mich mal an euch, da ich nicht weiß wie ich das lösen soll bzw. ob es sowas überhaupt zu kaufen gibt. ...